Space Python Ładowanie Pythona…

Analizator dziennika

Napisz kodTrudny 3 etapy

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.

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".

Poziomy i godziny
Sparsowane wpisy

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.

Pierwszy ERROR

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).

Ranking
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

Iterowanie po słowniku

Pętla for domyślnie iteruje po kluczach. values() zwraca wartości. items() zwraca pary klucz-wartość do rozpakowania.
iterowanie-po-slowniku.py
# 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")
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:].