Space Python Ładowanie Pythona…

Walidator manifestu

Napisz kodŚredni 2 etapy

Zespół logistyki wpisał manifest na następny lot zaopatrzeniowy ręcznie, a ekipa załadunkowa nie ruszy żadnej skrzyni, dopóki każda linia się nie zgadza. Ostatnio literówka w masie wysłała pakiet baterii ważący 61 kg na półkę przeznaczoną na 50.

Napisz walidator, który czyta każdą pozycję i mówi dokładnie, co jest nie tak z każdą z nich, wszystko naraz, żeby zespół mógł poprawić listę za jednym razem.

Napisz problems(item), która zwraca listę wszystkiego, co jest nie tak z jedną pozycją: każde brakujące pole z REQUIRED, w tej kolejności, a potem masę, która nie jest liczbą, wynosi 0 lub mniej albo przekracza MAX_ITEM_KG. Potem wypisz jedną linię na pozycję, nazwaną jej id, a gdy go nie ma, jej numerem:

CG-0042 PASS
CG-0043 PASS
CG-0044 FAIL: brak pola category
CG-0045 FAIL: masa 61.0 kg ponad limit 50.0 kg
pozycja 5 FAIL: brak pola id
CG-0047 FAIL: masa nie jest liczbą
CG-0048 FAIL: brak pola category; masa musi być większa niż 0
CG-0043 PASS

Połącz kilka problemów przez "; ".join(found). Sprawdź typ przez isinstance(mass, (int, float)), zanim go porównasz.

Linia na pozycję
problems() dla dowolnej pozycji

Ukończ etap 1, aby odblokować ten etap.

Dwie rzeczy, których jedna pozycja nie wie o sobie: czy jej identyfikator był już użyty i czy cały ładunek się mieści. W pętli dodaj "powtórzony identyfikator" do problemów pozycji, której identyfikator już się pojawił, licz pozycje, które przechodzą, i ich masę, a na końcu wypisz sumy wobec MAX_LOAD_KG:

CG-0042 PASS
CG-0043 PASS
CG-0044 FAIL: brak pola category
CG-0045 FAIL: masa 61.0 kg ponad limit 50.0 kg
pozycja 5 FAIL: brak pola id
CG-0047 FAIL: masa nie jest liczbą
CG-0048 FAIL: brak pola category; masa musi być większa niż 0
CG-0043 FAIL: powtórzony identyfikator
Zaliczone 2 z 8 pozycji, 20.9 z 25.0 kg

set identyfikatorów widzianych do tej pory szybko odpowiada na pytanie „czy ten był już użyty?”. Linię o przekroczeniu limitu wypisuj tylko wtedy, gdy ładunek jest za ciężki.

Cały manifest
problems() nadal działa
Nie jesteś zalogowany, więc postęp zostaje tylko w tej przeglądarce. Zaloguj się, aby go zapisać i korzystać z podpowiedzi oraz rozwiązań.

Podpowiedzi

Zagnieżdżone słowniki

Słowniki mogą zawierać inne słowniki i listy. Dostęp przez łańcuch kluczy: dane["zewnętrzny"]["wewnętrzny"]. Przydatne dla złożonych struktur.
zagniezdzone-slowniki.py
# Zagnieżdżone słowniki

missions = {
    "Apollo 11": {
        "year": 1969,
        "target": "Księżyc",
        "success": True,
        "crew": ["Armstrong", "Aldrin", "Collins"]
    },
    "Voyager 1": {
        "year": 1977,
        "target": "Kosmos międzygwiezdny",
        "success": True,
        "current_distance_au": 159
    }
}

# Dostęp do zagnieżdżonych danych
print("Rok Apollo 11:", missions["Apollo 11"]["year"])
print("Załoga:", missions["Apollo 11"]["crew"])

# Pierwszy astronauta
print("Dowódca:", missions["Apollo 11"]["crew"][0])
Otwórz cały przykład
script.py
PythonWiersz 1, kol. 1Spacje: 4
Ładowanie środowiska Pythona…

Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].