elif – więcej niż dwie możliwe drogi
Materiały tej lekcji są na razie tylko do czytania na stronie. Kod przepisz albo skopiuj do swojego edytora.
Czego się nauczysz
Na poprzedniej lekcji program wybierał jedną z dwóch możliwości. Ale ocena szkolna ma sześć stopni, a rok cztery pory. „Zdane albo niezdane” nie zawsze wystarcza – do tego służy elif.
Po tej lekcji:
- napiszesz łańcuch
if – elif – elif – else, - wyjaśnisz, dlaczego wykona się tylko jeden blok,
- rozpoznasz błąd wynikający ze złej kolejności warunków,
- zagnieździsz jeden warunek w drugim z poprawnym wcięciem.
Budowa łańcucha if – elif – else
Między if a else można wstawić dowolnie wiele bloków elif. Każdy ma własny warunek i własny zestaw poleceń. Nazwa to skrót od angielskiego „else if”, czyli „a jeśli nie, to sprawdź, czy…”.
ocena = 4
if ocena == 6:
print("Celujacy")
elif ocena == 5:
print("Bardzo dobry")
elif ocena == 4:
print("Dobry")
else:
print("Nizej")
Python sprawdza warunki po kolei, od góry. Pierwszy, który okaże się prawdziwy, wykonuje swój blok. Wszystkie pozostałe są pomijane – nawet jeśli też byłyby prawdziwe.
ifjest zawsze pierwszy i obowiązkowy.elifmoże być jeden, może być pięć, może nie być wcale.elsejest opcjonalne i zawsze ostatnie. Łapie wszystko, co nie pasowało wyżej.
Z całego łańcucha wykona się dokładnie jeden blok. Nigdy dwa.
Kolejność warunków potrafi zepsuć program
Przy porównaniach typu „większe lub równe” kilka warunków może być prawdziwych jednocześnie. Wykona się ten, który stoi wyżej.
# ŹLE
if ocena >= 3:
print("Zdane")
elif ocena >= 5:
print("Bardzo dobrze") # nigdy się nie wykona
# DOBRZE
if ocena >= 5:
print("Bardzo dobrze")
elif ocena >= 3:
print("Zdane")
W złej wersji ocena 5 wpada w pierwszy warunek >= 3 i program wypisuje „Zdane”. Do drugiej gałęzi nigdy nie dojdzie.
Reguła: przy warunkach zachodzących na siebie zaczynaj od najbardziej szczegółowego – tego, który spełnia najmniej wartości. Ogólne zostawiaj na koniec.
Ten błąd nie daje żadnego komunikatu. Program działa, tylko wypisuje nie to, co trzeba – dlatego trudno go wykryć.
Warunek w warunku
Wewnątrz bloku warunkowego wolno umieścić następny warunek. Trzeba tylko pamiętać o dodatkowym poziomie wcięcia – kolejne cztery spacje.
if wiek >= 18:
if ma_bilet:
print("Wejscie OK")
else:
print("Kup bilet")
else:
print("Za mlody")
Zewnętrzny warunek musi być spełniony, żeby wewnętrzny w ogóle został sprawdzony.
Nie zagnieżdżaj bez potrzeby. Dwa poziomy są zrozumiałe, cztery już nie. Bardzo często zamiast zagnieżdżania wystarczy jeden warunek z operatorem and – poznasz go na następnej lekcji.
Spróbuj sam
W kodzie z lekcji są dwie funkcje: ocen_zle i ocen_dobrze. Uruchom program i porównaj ich wyniki dla 95 punktów – to dokładnie pułapka kolejności warunków. Potem zmień liczbę punktów i sprawdź ponownie.
Zadania z lekcji:
- Utwórz zmienną
ocenaz liczbą od 1 do 6. Wypisz jej słowną nazwę: celujący, bardzo dobry, dobry, dostateczny, dopuszczający, niedostateczny. - Utwórz zmienną
temperatura. Wypisz „Mroz” poniżej zera, „Zimno” do 10 stopni, „Cieplo” do 20, „Goraco” powyżej. Uważaj na kolejność warunków. - Utwórz zmienną
miesiacz liczbą od 1 do 12. Wypisz porę roku. Grudzień, styczeń i luty to zima. - Napisz program z zagnieżdżonym warunkiem: sprawdź najpierw, czy liczba jest dodatnia, a potem czy jest parzysta. Wypisz odpowiedni komunikat dla każdego z trzech możliwych przypadków.
Sprawdź się
- Napiszę łańcuch
if – elif – elif – else. - Wyjaśnię, dlaczego wykona się tylko jeden blok.
- Rozpoznam błąd wynikający ze złej kolejności warunków.
- Zagnieżdżę jeden warunek w drugim z poprawnym wcięciem.
Na następnej lekcji: operatory logiczne and, or i not. Zamiast zagnieżdżać warunki jeden w drugim, połączysz je w jednej linii.
Notatki
Prezentacja
Kod
Otwórz kod, zmieniaj go i uruchamiaj na stronie – np. usuń # z linii oznaczonej jako błąd i zobacz, co się stanie. „Przywróć” wraca do wersji z lekcji.