Kod startu z „Odpowiedzi API” działał na gotowym słowniku, ale API naprawdę wysyła tekst JSON. Zamień go na słownik przez json.loads(), zobacz, czym stają się false i null, a potem obsłuż odpowiedź uciętą w transmisji.
Zamień słownik z dziennym podsumowaniem misji na tekst JSON przez json.dumps() i indent=2, zobacz, czym stają się True, False i None, a potem zachowaj czytelne polskie litery stacji i posortuj klucze, żeby pliki łatwo się porównywało.
Sparsuj znaczniki czasu startu i najnowszej telemetrii przez datetime.fromisoformat(), odejmij je, żeby dostać czas od startu misji, a potem policz czasy zdarzeń zgłoszonych przez stacje naziemne w trzech różnych strefach czasowych.
Rozszerz formatowanie z „Formatowania czasu trwania”: wyliczaj pozostałe sekundy z czasu startu i datetime.now(timezone.utc) zamiast liczby wpisanej ręcznie, a potem zamień to w countdown(), które po starcie liczy w górę z T+.
Zapisz dzisiejsze wpisy dziennika misji do mission.log przez with open(), po jednym w linii, odczytaj plik i go wypisz, a potem dodaj funkcję append_entry(), która dopisuje linie na końcu, nie kasując tego, co już jest.
Skieruj parser strumienia z „Przetwórz cały strumień” na telemetry.csv: czytaj go przez csv.DictReader, z nazwami pól z wiersza nagłówka, a potem znajdź najgorętszy odczyt temperatury, porównując wartości jako liczby.
Zasymuluj 100 odczytów czujnika, każdy z 5% szans na zakłócenie, i ustaw ziarno random na 42, żeby liczba była taka sama przy każdym uruchomieniu, a test mógł ją dokładnie sprawdzić, a potem wybierz rodzaj każdego zakłócenia przez random.choice().
Zrefaktoryzuj podsumowanie temperatur: usuń ręcznie napisane mean() i median() i użyj zamiast nich statistics.mean() i statistics.median(), a potem dodaj odchylenie standardowe i obsłuż przeloty ze zbyt małą liczbą odczytów.
Zrefaktoryzuj licznik poziomów z „Wpisów na poziom”: zastąp słownik i counts.get() przez collections.Counter, który zaczyna każdy klucz od 0, a potem wypisz poziomy od najczęstszego do najrzadszego przez most_common().
Sprawdzanie zbiorników jest pełne wypisywań, które zostały po debugowaniu. Zastąp je wywołaniami logging na właściwych poziomach, żeby wpisy debug pozostały ukryte, dopóki się ich nie włączy, a potem daj kodowi paliwa jego własny nazwany logger.
Mały, ale kompletny potok danych: czytaj CSV z telemetrią, odrzucaj wiersze z nieznanymi czujnikami lub zepsutymi wartościami z podaniem powodu, oznaczaj odczyty poza limitami każdego czujnika i zapisz podsumowanie JSON dla panelu.
Sparsuj harmonogram startów z JSON-a, zostaw starty, które dopiero nastąpią, posortuj je według okna i wypisz dla każdego linię zestawienia z pozostałym czasem i ewentualnym wstrzymaniem, a potem przełącz zestawienie na żywy zegar.