Walidator manifestu
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.
Ukończ etap 1, aby odblokować ten etap.
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.
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.
Podpowiedzi
Zagnieżdżone słowniki
# 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])
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].