Dzienny raport misji
Na koniec każdego dnia zmiana kończąca dyżur zostawia raport dla następnej: każdy podsystem, jego stan, jego alarmy i to, jaką część dnia działał. Ludzie czytają go na ekranie, czcionką o stałej szerokości. Biuro inżynierskie chce tych samych liczb jako arkusza.
Wygeneruj jedno i drugie z tych samych danych.
Ukończ etap 1, aby odblokować ten etap.
Wypisz raport o szerokości WIDTH znaków: tytuł i linię misji wyśrodkowane między dwiema liniami ze znaków =, nagłówki kolumn, wiersz dla każdego podsystemu i linię sum z dodanymi alarmami i średnią dostępnością:
==========================================
DZIENNY RAPORT MISJI
Lumen-3 · 2026-11-05
==========================================
Podsystem Status Alarmy Dostępność
------------------------------------------
POWER OK 3 99.80%
GNC WARN 2 97.25%
PROP OK 0 100.00%
COMMS DEGRADED 2 94.60%
THERM OK 0 99.95%
------------------------------------------
Razem 7 98.32%
Kolumny mają 12, 12, 7 i 11 znaków: {row['subsystem']:<12} dopełnia z prawej, {row['alerts']:>7} z lewej, a {value:>10.2f}% daje dwa miejsca po przecinku i znak procentu. "tekst".center(WIDTH) wyśrodkowuje linię.
Ukończ etap 1, aby odblokować ten etap.
Zapisz te same wiersze do report.csv przez csv.DictWriter: wiersz nagłówka z czterema kluczami, potem jeden wiersz na podsystem. Po raporcie wypisz pustą linię, linię o zapisie i plik w takiej postaci, w jakiej został zapisany:
Zapisano report.csv: subsystem,status,alerts,uptime_pct POWER,OK,3,99.8 GNC,WARN,2,97.25 PROP,OK,0,100.0 COMMS,DEGRADED,2,94.6 THERM,OK,0,99.95
Otwórz plik z newline=""; writeheader() zapisuje klucze, a writerows(rows) wszystkie wiersze. Ukryte testy usuwają plik, uruchamiają twój program jeszcze raz i czytają to, co zapisze.
Podpowiedzi
Formatowanie tekstu z f-string
# F-stringi - nowoczesne formatowanie tekstu
astronaut = "John Smith"
mission = "Mars Explorer"
days_in_space = 180
print(f"Astronauta: {astronaut}")
print(f"Misja: {mission}")
print(f"Czas trwania: {days_in_space} dni")
# Możemy też wykonywać obliczenia
print(f"To {days_in_space / 30:.1f} miesięcy")
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].