Licznik startów się wysypuje
Oprogramowanie kontroli startów liczy starty dnia. Napisano je jako licznik poza funkcją i funkcję, która dodaje do niego jeden. W dniu startu pierwszy start zatrzymał program błędem, którego nikt wcześniej nie widział.
Przewidź, co się stanie, sprawdź dlaczego, a potem napraw to tak, żeby funkcja pozostała niezależna od reszty programu.
Ukończ etap 1, aby odblokować ten etap.
Nie uruchamiaj jeszcze kodu. Przeczytaj go i zdecyduj, co wypisze. Wpisz swoje przewidywanie w prediction, na górze, w cudzysłowie. Potem uruchom kod i porównaj.
Na tym etapie zalicza każde przewidywanie: chodzi o to, żeby pomyśleć przed uruchomieniem. Po sprawdzeniu zobaczysz swoje przewidywanie obok tego, co wypisał Python.
W funkcji launches_today += 1 zarówno czyta, jak i przypisuje nazwę.
Ten program kończy się błędem, a programu, który się wysypuje, nie da się sprawdzić. Gdy go uruchomisz i zobaczysz błąd, postaw # przed ostatnią linią, wywołaniem, a potem sprawdź: zobaczysz swoje przewidywanie obok tego, co zrobiło wywołanie.
Ukończ etap 1, aby odblokować ten etap.
Zbadaj. Zapisz nazwę błędu w error_name, a to, czy Python traktuje launches_today w funkcji jako local, czy global, w scope.
Zmień. Przekaż licznik do funkcji jako drugi parametr, zwracaj nowy licznik i zapisuj go przy każdym wywołaniu, bez global. Ma wypisać:
Lumen-3 wystartował, dziś: 1 Tern-5 wystartował, dziś: 2 Razem: 2
Ukończ etap 2, aby odblokować ten etap.
Napisz after_burn(fuel_kg, burn_kg), która zwraca pozostałe paliwo, i użyj jej w pętli po zaplanowanych odpaleniach, bez global. Wypisz:
Odpalenie 180.0 kg, zostało 1020.0 kg Odpalenie 45.5 kg, zostało 974.5 kg Odpalenie 310.0 kg, zostało 664.5 kg
Podpowiedzi
Słowo kluczowe global
# Modyfikowanie zmiennych globalnych
fuel = 100
def use_fuel(amount):
global fuel # Deklaracja użycia globalnej
if fuel >= amount:
fuel -= amount
print(f"Zużyto {amount}. Pozostało: {fuel}%")
else:
print("Za mało paliwa!")
print(f"Start: {fuel}%")
use_fuel(30)
use_fuel(50)
use_fuel(30)
print(f"Koniec: {fuel}%")
# UWAGA: Unikaj nadużywania global!
# Lepiej przekazywać wartości jako parametry
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].