Space Python Ładowanie Pythona…

Potok telemetrii

Napisz kodTrudny 3 etapy

Tu wszystkie elementy się łączą: czytnik CSV z „Telemetrii z CSV”, obsługa błędów z „Przetrwaj złe linie”, limity ze sprawdzania alarmów i JSON z „JSON na wyjściu”. Eksport ze stacji naziemnej przychodzi co kilka sekund. Twój program ma go odczytać, odrzucić to, czemu nie można ufać, podnieść alarm przy tym, co wychodzi poza zakres, i zostawić podsumowanie, które panel umie odczytać.

Trzy etapy: sprawdź, oznacz, zapisz.

Czytaj telemetry.csv przez csv.DictReader. Odrzuć wiersz, którego czujnika nie ma w LIMITS albo którego wartość nie jest liczbą, z jego numerem linii w pliku: nagłówek to linia 1, więc pierwszy odczyt to linia 2. Każdy inny wiersz zachowaj w readings, jako słownik z time ("HH:MM:SS"), sensor i value (float). Program wypisze:

Odrzucona linia 5: wartość ERR nie jest liczbą
Odrzucona linia 8: nieznany czujnik ENG-9
Poprawne: 7, odrzucone: 2

enumerate(csv.DictReader(csv_file), start=2) numeruje wiersze tak, jak robi to plik. Najpierw sprawdź czujnik, potem spróbuj zamiany.

Odrzucenia z powodami
Czyste odczyty

Ukończ etap 1, aby odblokować ten etap.

Po liczbach sprawdź każdy poprawny odczyt z zakresem jego czujnika w LIMITS. Zbierz każdy spoza zakresu w alerts, jako słownik z time, sensor, value, side ("powyżej" albo "poniżej") i przekroczonym limit, a potem wypisz je i ich liczbę:

ALERT 09:30:15 ENG-1 455.2 powyżej 450.0
ALERT 09:30:15 TANK-1 9.4 poniżej 10.0
ALERT 09:30:20 CABIN 94.1 poniżej 95.0
Alarmy: 3

low, high = LIMITS[reading["sensor"]] rozpakowuje zakres.

Trzy alarmy

Ukończ etap 2, aby odblokować ten etap.

Zapisz podsumowanie dla panelu do summary.json: słownik z valid (liczbą odczytów), rejected i listą alerts, zapisany przez json.dump(), z indent=2 i ensure_ascii=False. Potem wypisz ostatnią linię:

Zapisano summary.json

Ukryte testy otwierają summary.json i porównują go z tym, czego oczekują.

Raport
summary.json
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

Import modułów systemowych

import-modulow-systemowych.py
# Moduł to skrzynka z narzędziami, którą ktoś już zbudował i przetestował za Ciebie

# Zwykły import wczytuje cały moduł
import sys
import platform
import math

# from ... import wczytuje tylko jedno narzędzie
from math import sqrt

# as nadaje modułowi krótszy przydomek
import random as rng

# Przy zwykłym imporcie: nazwa modułu, kropka, potem narzędzie
print("Wersja Pythona:", platform.python_version())
print("System:", platform.system())
print("Python mieszka w:", sys.executable)

# math zawiera stałe, których nie chciałbyś wpisywać z pamięci
radius_km = 6371
print("Obwód Ziemi:", round(2 * math.pi * radius_km), "km")

# sqrt przyszło samo, więc nie potrzebuje kropki przed sobą
print("Pierwiastek kwadratowy z 9:", sqrt(9))

# rng to po prostu przydomek dla random
print("Losowy dzień roku marsjańskiego:", rng.randint(1, 687))
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:].