Lekcja 3. Instrukcja warunkowa if — if, elif, else w Pythonie
latwyPo co się tego uczymy?
To pierwszy moment, w którym program przestaje być "listą poleceń wykonywanych od góry do dołu" i zaczyna SAMODZIELNIE PODEJMOWAĆ DECYZJE na podstawie danych. Instrukcja warunkowa pojawia się w niemal każdym zadaniu maturalnym — walidacja danych, klasyfikacja wyników, systemy oceniania.
Teoria
Składnia w Pythonie jest inna niż w C#/Javie — zamiast nawiasów klamrowych { }, Python używa DWUKROPKA : i WCIĘCIA (zwykle 4 spacje), żeby wyznaczyć, co należy do bloku instrukcji if. To NIE jest kwestia stylu — złe wcięcie w Pythonie to BŁĄD SKŁADNIOWY, program się nie uruchomi.
Najprostszy if:
if warunek:
# wykonuje się TYLKO, gdy warunek == True
instrukcja
if / else — obsługuje DWIE możliwości: if warunek: ... else: ... — blok else wykonuje się, gdy warunek jest False.
if / elif / else — Python NIE ma słowa else if jak C# — używa skróconego elif ("else if" w jednym słowie). Warunki sprawdzane są PO KOLEI, od góry — wykonuje się TYLKO PIERWSZY pasujący blok, reszta jest pomijana, nawet jeśli też byłaby prawdziwa.
Zagnieżdżone if — instrukcja warunkowa może zawierać KOLEJNĄ instrukcję warunkową w swoim wnętrzu (z dodatkowym poziomem wcięcia) — przydatne, gdy drugi warunek ma sens TYLKO, jeśli pierwszy się spełnił.
Operator trójargumentowy (wyrażenie warunkowe) — Python pozwala zapisać prosty if/else w JEDNEJ linijce: wynik = "parzysta" if liczba % 2 == 0 else "nieparzysta". To skrót przydatny, gdy chcemy przypisać JEDNĄ z dwóch wartości na podstawie warunku, bez pisania wielolinijkowego bloku.
"Prawdziwość" wartości niebędących bool — w warunku if Python akceptuje NIE TYLKO True/False, ale też inne typy: pusty tekst "", liczba 0 i pusta lista [] są traktowane jako "fałszywe" (falsy), a niepusty tekst, niezerowa liczba i niepusta lista jako "prawdziwe" (truthy). To wygodny skrót: zamiast if len(lista) > 0: można napisać po prostu if lista:.
Schemat
if warunek1:
# A - wykonuje się, gdy warunek1 == True
elif warunek2:
# B - sprawdzany TYLKO, jeśli warunek1 był False
elif warunek3:
# C - sprawdzany TYLKO, jeśli warunek1 i warunek2 były False
else:
# D - gdy ŻADEN z powyższych warunków nie był True
PRZYKŁAD - klasyfikacja oceny:
ocena == 6 → "Celujący" (sprawdzone jako pierwsze)
ocena == 5 → "Bardzo dobry" (TYLKO jeśli ocena != 6)
ocena >= 3 → "Zaliczone" (TYLKO jeśli ocena != 6 i != 5)
else → "Niezaliczone" (żaden warunek nie pasował)
Przykład z życia
System rekrutacyjny na studia sprawdza próg punktowy: if punkty >= 90: przyjety = "tak, z wyróżnieniem"; elif punkty >= 60: przyjety = "tak"; else: przyjety = "nie" — to dokładnie ta sama struktura decyzyjna, której nauczysz się w tej lekcji, tylko zastosowana do prawdziwego, poważnego problemu.
instrukcja_if.py
# Najprostszy if
temperatura = 28
if temperatura > 25:
print("Jest gorąco!")
# if / else
wiek = int(input("Podaj swój wiek: "))
if wiek >= 18:
print("Możesz zagłosować.")
else:
print("Jeszcze nie możesz zagłosować.")
# if / elif / else - kolejność warunków ma znaczenie!
ocena = int(input("Podaj ocenę (1-6): "))
if ocena == 6:
opis = "Celujący"
elif ocena == 5:
opis = "Bardzo dobry"
elif ocena >= 3:
opis = "Zaliczone"
else:
opis = "Niezaliczone"
print(f"Wynik: {opis}")
# Zagnieżdżone if
if wiek >= 18:
if wiek >= 65:
print("Masz prawo do zniżki seniora")
else:
print("Jesteś pełnoletni")
# Operator trójargumentowy (jednolinijkowy if/else)
liczba = 7
parzystosc = "parzysta" if liczba % 2 == 0 else "nieparzysta"
print(f"{liczba} jest {parzystosc}")
Komentarz i wyjaśnienie kodu
Zwróć uwagę na KOLEJNOŚĆ warunków w bloku ocena == 6 / == 5 / >= 3 — gdyby warunek ocena >= 3 stał PRZED ocena == 6, to dla oceny 6 program NIGDY nie dotarłby do sprawdzenia "Celujący", bo 6 >= 3 jest prawdziwe i pierwszy pasujący warunek "wygrywa".
W zagnieżdżonym if drugi warunek (wiek >= 65) jest sprawdzany DOPIERO wewnątrz bloku pierwszego if — jeśli wiek < 18, Python nawet nie SPRAWDZI drugiego warunku, bo cały wewnętrzny blok jest pomijany.
Operator trójargumentowy "parzysta" if liczba % 2 == 0 else "nieparzysta" czyta się: "parzysta, JEŚLI liczba%2==0, W PRZECIWNYM RAZIE nieparzysta" — to DOKŁADNIE ta sama logika co wielolinijkowy if/else, tylko zapisana w jednej linijce dla zwięzłości.
Ćwiczenie samodzielne
Uruchom program i sprawdź klasyfikację ocen dla wartości 1-6. Następnie zmodyfikuj kod tak, żeby dla oceny 2 wypisywał "Dopuszczający", a nie wpadał w gałąź else razem z oceną 1.
Plac zabaw — wypróbuj online
Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.
Zadania do pracy własnej
Napisz program sprawdzający, czy podana liczba jest dodatnia, ujemna, czy równa zero (trzy różne komunikaty, użyj
if/elif/else).Napisz program klasyfikujący BMI (waga w kg / (wzrost w m)²) na cztery kategorie: poniżej 18.5 — niedowaga, 18.5-24.9 — waga prawidłowa, 25-29.9 — nadwaga, powyżej 30 — otyłość.
Napisz program sprawdzający, czy trzy podane liczby (boki trójkąta) mogą tworzyć trójkąt (suma dwóch krótszych boków musi być większa od najdłuższego), a jeśli tak — czy jest to trójkąt równoboczny, równoramienny, czy różnoboczny. Wykorzystaj zagnieżdżone instrukcje
iforaz operatory logiczne z poprzedniej lekcji.
Typowe błędy
Złe wcięcia — w Pythonie wcięcie NIE JEST kosmetyczne, tylko część składni; niespójne mieszanie spacji i tabulatorów albo różna liczba spacji w tym samym bloku spowoduje błąd IndentationError.
Zapominanie dwukropka : na końcu linii if/elif/else — to jeden z pierwszych błędów składniowych, jakie napotka każdy uczeń Pythona.
Zła kolejność warunków w łańcuchu elif — warunek OGÓLNIEJSZY umieszczony PRZED bardziej SZCZEGÓŁOWYM "przechwyci" wszystkie pasujące przypadki, zanim dotrze do tego szczegółowego — zobacz komentarz do kodu powyżej.
Nawiązanie do egzaminu zawodowego
Instrukcja warunkowa to jeden z absolutnie podstawowych elementów sprawdzanych na maturze (Arkusz II) — pojawia się w niemal każdym zadaniu programistycznym. W dziale "Algorytmy i złożoność" zobaczysz if używane wewnątrz dużo bardziej złożonych struktur — np. przy sprawdzaniu znaku funkcji w metodzie bisekcji czy warunku zakończenia w algorytmach sortowania.