Klauzule strażnicze
Komputer dokowania decyduje, czy statek może zadokować. Jego funkcja rosła po jednym warunku naraz, każdy wewnątrz poprzedniego, a powód odmowy siedzi teraz cztery poziomy głęboko, na dalekim końcu else, którego if jest poza górną krawędzią ekranu.
Spłaszcz funkcję, nie zmieniając ani jednej odpowiedzi, a potem dodaj kolejną regułę, o którą prosi zespół dokowania.
Ukończ etap 1, aby odblokować ten etap.
Przepisz can_dock() na klauzule strażnicze: sprawdzaj każdy powód odmowy osobno, od razu zwracaj powód, a zgodę zwróć na końcu. Każda odpowiedź musi zostać taka sama:
Dokowanie zatwierdzone Zbyt duża prędkość Zbyt duży kąt Załoga niegotowa Port zajęty
Zachowaj kolejność sprawdzeń: port, załoga, prędkość, kąt. Odwróć każdy warunek, na przykład if not port_free:, a else nie będzie potrzebne.
Ukończ etap 1, aby odblokować ten etap.
Zespół dokowania dodaje regułę: światła dokowania muszą być włączone. Dodaj parametr lights_on z wartością domyślną True, żeby istniejące wywołania działały dalej, i klauzulę po sprawdzeniu załogi. Testuje to szóste wywołanie:
Dokowanie zatwierdzone Zbyt duża prędkość Zbyt duży kąt Załoga niegotowa Port zajęty Światła dokowania wyłączone
Dodaj wywołanie na dole: print(can_dock(0.05, 1.0, True, True, lights_on=False)).
Podpowiedzi
Wczesne wyjście z funkcji
# Wczesne wyjście z funkcji (guard clause)
def check_fuel(level):
"""Sprawdza czy poziom paliwa jest wystarczający."""
if level < 0:
return "Błąd: ujemny poziom"
if level == 0:
return "KRYTYCZNY: Brak paliwa!"
if level < 25:
return "OSTRZEŻENIE: Niski poziom"
if level < 50:
return "OK: Rozważ tankowanie"
return "OK: Paliwo wystarczające"
# Testowanie różnych poziomów
for p in [100, 40, 20, 0, -5]:
status = check_fuel(p)
print(f"Poziom {p}%: {status}")
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].