Spłaszcz zagnieżdżone if
Kontrola dokowania do stacji działa, ale rozrosła się w trzy instrukcje if jedna w drugiej, z HOLD wypisanym trzy razy. Każda nowa zasada przesuwałaby kod jeszcze bardziej w prawo.
Spłaszcz ją do jednego warunku bez zmiany tego, co wypisuje, a potem przepisz tak, żeby HOLD mówiło, która kontrola zawiodła.
Ukończ etap 1, aby odblokować ten etap.
Dokowanie dostaje GO tylko wtedy, gdy przechodzą wszystkie trzy kontrole: prędkość zbliżania jest mniejsza niż 0.1 m/s, ustawienie odchyla się o mniej niż 2 stopnie, a zatrzaski są gotowe. Zastąp trzy zagnieżdżone if jednym if, który łączy kontrole przez and, i jednym else. Wynik nie może się zmienić:
Dokowanie: GO
Jakiekolwiek byłyby odczyty, twoja wersja musi wypisać dokładnie to, co zagnieżdżona.
Ukończ etap 1, aby odblokować ten etap.
Załoga chce wiedzieć, dlaczego dokowanie jest wstrzymane. Przepisz kontrolę jako jeden płaski łańcuch, który po kolei sprawdza każdy problem i zgłasza pierwszy znaleziony; GO trafia do else na końcu:
Dokowanie: HOLD, za duża prędkość zbliżania Dokowanie: HOLD, złe ustawienie Dokowanie: HOLD, zatrzaski niegotowe Dokowanie: GO
Najpierw sprawdź prędkość, potem ustawienie, potem zatrzaski. Żadnego if wewnątrz innego if. Przy dzisiejszych odczytach nadal wypisuje GO.
Podpowiedzi
Operatory logiczne and, or, not
# Operatory logiczne
fuel = 80
crew = True
weather = "dobra"
# AND - oba warunki muszą być prawdziwe
if fuel > 50 and crew:
print("Podstawowe warunki spełnione")
# OR - wystarczy jeden warunek
if weather == "dobra" or weather == "akceptowalna":
print("Warunki atmosferyczne OK")
# NOT - negacja
failure = False
if not failure:
print("Brak awarii - można startować")
# Złożone warunki
if fuel > 50 and crew and not failure:
print("WSZYSTKIE SYSTEMY GOTOWE!")
else:
print("Start wstrzymany")
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].