Ponów wysyłkę
Polecenia do statku nie zawsze docierają za pierwszym razem: radio może przekroczyć czas oczekiwania albo zgubić nośną. Oprogramowanie łącza próbuje jeszcze raz, ale tylko kilka razy, żeby martwe łącze nie blokowało wszystkiego innego.
Napisz pętlę ponowień na symulatorze, który odtwarza odpowiedzi radia, a potem rozłóż próby w czasie.
Ukończ etap 1, aby odblokować ten etap.
Próbuj maksymalnie MAX_ATTEMPTS razy. Próba 1 dostaje pierwszy wynik z listy, próba 2 drugi i tak dalej. Wypisz każdą próbę, zatrzymaj się na pierwszym "ok", a potem powiedz, jak się skończyło:
Próba 1: timeout Próba 2: no carrier Próba 3: ok Wysłano w próbie nr 3
Gdy wszystkie trzy zawiodą, ostatnia linia to Wysyłka nieudana, wykorzystane próby: 3. Przejdź pętlą po range(1, MAX_ATTEMPTS + 1), przerwij przez break przy sukcesie i użyj flagi takiej jak sent, żeby odróżnić oba zakończenia.
Ukończ etap 1, aby odblokować ten etap.
Natychmiastowe ponawianie rzadko pomaga przeciążonemu łączu. Czekaj 2 sekundy po pierwszej porażce, potem dwa razy dłużej po każdej następnej, ale nie czekaj po ostatniej próbie, bo nic po niej nie następuje:
Próba 1: timeout Czekam 2 s Próba 2: no carrier Czekam 4 s Próba 3: ok Wysłano w próbie nr 3
Ustaw delay_s = 2 przed pętlą. Po porażce, jeśli attempt < MAX_ATTEMPTS, wypisz czekanie i podwój delay_s. (Symulator tylko wypisuje czekanie; prawdziwy kod wywołałby time.sleep(delay_s).)
Podpowiedzi
Break i continue w pętlach
# break - przerywa pętlę całkowicie
print("Szukanie anomalii:")
data = [10, 12, 11, 9, 50, 8, 7]
for value in data:
if value > 20:
print(f"ANOMALIA: {value}")
break
print(f"Wartość OK: {value}")
# continue - pomija resztę iteracji
print("\nFiltrowanie danych:")
results = [5, -2, 10, -8, 15, -3]
for result in results:
if result < 0:
continue # Pomijamy ujemne
print(f"Poprawny wynik: {result}")
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].