Funkcja parsera
Parser danych z „Z linii rekord” żyje w jednej pętli w jednym programie. Kontrola alarmów i raport dzienny też chcą parsować linie telemetrii, a kopiowanie pętli do każdego z nich to sposób, w jaki błędy zostają naprawione w jednym miejscu, a w drugim nie.
Zamień parsowanie w funkcję, którą może wywołać każdy program, a potem pozwól jej samej decydować, które linie zasługują na rekord.
Ukończ etap 1, aby odblokować ten etap.
Przenieś parsowanie jednej linii do funkcji parse_line(line), która zwraca słownik rekordu, i wywołuj ją w pętli. Wynik musi zostać dokładnie taki sam:
Rekordy: 4
{'time': '09:30:05', 'sensor': 'ENG-2', 'value': 412.5, 'unit': 'C'}
{'time': '09:30:05', 'sensor': 'TANK-1', 'value': 78.3, 'unit': '%'}
{'time': '09:30:10', 'sensor': 'CABIN', 'value': 101.2, 'unit': 'kPa'}
{'time': '09:30:10', 'sensor': 'ENG-2', 'value': 415.0, 'unit': 'C'}Funkcja przyjmuje jedną linię, dzieli ją i zwraca przez return słownik. Pętla nadal pomija puste linie i komentarze, a potem dodaje parse_line(line).
Ukończ etap 1, aby odblokować ten etap.
Przenieś do funkcji także pomijanie. parse_line() usuwa spacje z końców linii, żeby nie trafiły do pól dobrej linii, i zwraca None dla pustej linii, komentarza albo linii, która nie ma dokładnie czterech pól. Pętla zachowuje po prostu wszystko, co nie jest None. Wynik zostaje taki sam:
Rekordy: 4
{'time': '09:30:05', 'sensor': 'ENG-2', 'value': 412.5, 'unit': 'C'}
{'time': '09:30:05', 'sensor': 'TANK-1', 'value': 78.3, 'unit': '%'}
{'time': '09:30:10', 'sensor': 'CABIN', 'value': 101.2, 'unit': 'kPa'}
{'time': '09:30:10', 'sensor': 'ENG-2', 'value': 415.0, 'unit': 'C'}W pętli: record = parse_line(line), a potem dodaj go, if record is not None.
Podpowiedzi
Zwracanie słownika lub listy
# Zwracanie złożonych struktur danych
def get_planet_data(name):
"""Zwraca słownik z danymi planety."""
database = {
"Mars": {"diameter": 6779, "moons": 2, "type": "skalista"},
"Jowisz": {"diameter": 139820, "moons": 95, "type": "gazowa"},
"Saturn": {"diameter": 116460, "moons": 83, "type": "gazowa"}
}
return database.get(name, {"error": "Nie znaleziono"})
def generate_schedule(days):
"""Generuje listę dni misji."""
return [f"Dzień {i+1}" for i in range(days)]
# Użycie
mars = get_planet_data("Mars")
print(f"Mars - księżyce: {mars["moons"]}")
schedule = generate_schedule(5)
print(f"Harmonogram: {schedule}")
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].