Analizator dziennika
Dzień startu zostawił długi dziennik misji, a przegląd po locie zaczyna się za godzinę. Nikt nie przeczyta każdej linii. Komisja chce trzech odpowiedzi: jak intensywna była każda godzina i każdy poziom, co zawiodło jako pierwsze i który podsystem najwięcej narzekał.
Zbuduj analizator, który na nie odpowiada, etap po etapie.
Ukończ etap 1, aby odblokować ten etap.
Podziel każdą linię na czas, poziom, podsystem i wiadomość przez split(maxsplit=3), żeby wiadomość została w całości, i zachowaj je jako słowniki w entries, z czasem jako "HH:MM:SS". Potem policz wpisy według poziomu, od najczęstszych, i według godziny, w kolejności czasu:
Według poziomu: WARN: 6 INFO: 5 ERROR: 2 Według godziny: 09:00: 4 10:00: 4 11:00: 5
Liczenie załatwią dwa obiekty Counter; godzina to dwa pierwsze znaki czasu plus ":00".
Ukończ etap 1, aby odblokować ten etap.
Znajdź pierwszy wpis ERROR i wypisz jego czas, podsystem i wiadomość albo Brak wpisów ERROR, gdy ich nie ma:
Pierwszy ERROR: 10:14:47 PROP Zawór paliwa 2 nie odpowiada
Zatrzymaj pętlę przez break, gdy tylko go znajdziesz. Ukryte testy uruchamiają też dziennik bez żadnych błędów.
Ukończ etap 2, aby odblokować ten etap.
Uszereguj podsystemy według liczby zgłoszonych wpisów WARN, z numeracją od 1:
Ostrzeżenia według podsystemu: 1. POWER: 3 2. GNC: 2 3. COMMS: 1
enumerate(warnings.most_common(), start=1) daje miejsce w rankingu i każdą parę (subsystem, count); rozpakuj je jako rank, (subsystem, count).
Podpowiedzi
Iterowanie po słowniku
# Iterowanie po słowniku
distances = {
"Księżyc": 384400,
"Mars": 225000000,
"Wenus": 108000000
}
# Iterowanie po kluczach
print("Cele:")
for target in distances:
print(f" - {target}")
# Iterowanie po wartościach
print("\nOdległości:")
for km in distances.values():
print(f" {km:,} km")
# Iterowanie po parach
print("\nKompletne dane:")
for target, km in distances.items():
print(f" {target}: {km:,} km")
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].