Potwierdź po nazwie
Przerwania misji nie da się cofnąć. Starą abort(reason, confirm) można było wywołać jako abort("Test", True), gdzie nic w linii nie mówi, co oznacza to True, a nieuważne kopiuj-wklej mogło przerwać prawdziwą misję.
Spraw, żeby nie dało się potwierdzić przez przypadek.
Ukończ etap 1, aby odblokować ten etap.
Zmień linię def na abort(reason, *, confirm), żeby confirm można było przekazać tylko po nazwie i nie dało się go pominąć, i zwracaj odmowę, gdy nie jest prawdziwy. Wywołania wypiszą:
PRZERWANIE: Spada ciśnienie w kabinie Odmowa przerwania: przekaż confirm=True
Z * na miejscu abort("Test", True) zatrzymuje się błędem TypeError, tak samo jak abort("Test").
Ukończ etap 1, aby odblokować ten etap.
Ktoś przekazał confirm="yes", a ponieważ niepusty napis jest prawdziwy, przerwanie się wykonało. Przyjmuj tylko samo True i dodaj wywołanie, które próbowało:
PRZERWANIE: Spada ciśnienie w kabinie Odmowa przerwania: przekaż confirm=True Odmowa przerwania: przekaż confirm=True
Porównuj przez is not True zamiast not confirm.
Podpowiedzi
Łączenie różnych typów argumentów
# Łączenie różnych typów argumentów
# Kolejność: zwykłe, *args, domyślne, **kwargs
def mission_log(name, *events, priority="NORMALNY", **details):
print(f"=== Misja: {name} [{priority}] ===")
if events:
print("Wydarzenia:")
for e in events:
print(f" - {e}")
if details:
print("Szczegóły:")
for k, v in details.items():
print(f" {k}: {v}")
print()
# Różne kombinacje
mission_log("Alpha")
mission_log("Beta", "Start", "Orbita", priority="WYSOKI")
mission_log("Gamma", "Start", commander="Kowalski", target="Mars")
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].