9. Python – instrukcje warunkowe if…elif…else


Szybki quiz – przypomnienie poprzedniej lekcji

Temat poprzedniej lekcji: stos i kolejka.

Pytanie 1. Co zostanie wyświetlone?

stack = []
stack.append(1)
stack.append(2)
stack.append(3)
print(stack[-1])
print(stack.pop())
print(stack)
Odpowiedź

Odpowiedź:

3
3
[1, 2]

stack[-1] tylko pokazuje szczyt stosu (nic nie usuwa), pop() zdejmuje ten element ze stosu.

Pytanie 2. Co zostanie wyświetlone?

from collections import deque

queue = deque(["A", "B", "C"])
queue.append("D")
print(queue.popleft())
print(queue)
Odpowiedź

Odpowiedź:

A
deque(['B', 'C', 'D'])

Kolejka działa w modelu FIFO: append dodaje na koniec, popleft zdejmuje z początku.

Pytanie 3. Uczeń chce zdjąć z kolejki pierwszą osobę („Ania”), ale program zwraca „Bartek”. Znajdź błąd.

from collections import deque

queue = deque(["Ania", "Bartek"])
first = queue.pop()
print(first)
Odpowiedź

Odpowiedź: pop() zdejmuje element z końca (jak w stosie). Do zdjęcia elementu z początku kolejki trzeba użyć queue.popleft().

Pytanie 4. Który z modeli to LIFO, a który FIFO (stos czy kolejka)? Dlaczego do kolejki zaleca się deque, a nie listę z pop(0)?

Odpowiedź

Odpowiedź: Stos to LIFO (ostatni dodany jest pierwszy zdjęty), kolejka to FIFO (pierwszy dodany jest pierwszy zdjęty). pop(0) na liście jest nieefektywne, bo po usunięciu pierwszego elementu trzeba przesunąć wszystkie pozostałe. deque szybko dodaje i usuwa elementy na obu końcach.


Instrukcje warunkowe to mechanizm pozwalający programowi podejmować decyzje i wykonywać różny kod w zależności od spełnienia określonych warunków. Są fundamentem logiki programowania – pozwalają odpowiadać na pytanie „co jeżeli?”.

Wyobraź sobie instrukcje warunkowe jak rozdroże:

  • if – „jeżeli warunek jest prawdziwy, idź tą drogą”
  • elif – „a jeżeli to nie działa, sprawdź następny warunek”
  • else – „w każdym innym przypadku, idź tą drogą”

Instrukcja if

UWAGA!!! PAMIĘTAJCIE O WCIĘCIACH!!!

Podstawowa składnia

if warunek:
    # kod wykonywany gdy warunek jest True
    instrukcja1
    instrukcja2

Kluczowe elementy:

  • Słowo kluczowe if
  • Warunek (wyrażenie zwracające True lub False)
  • Dwukropek :
  • Wcięcie 4 spacji (bardzo ważne!)

Najprostszy przykład:

liczba = 10

if liczba > 0:
print("Liczba jest dodatnia")

#wynik:
#Liczba jest dodatnia

Jak to działa:

  • Python sprawdza warunek liczba > 0
  • 10 > 0 to True
  • Wykonuje kod w bloku (z wcięciem)

Przykład bez spełnionego warunku

liczba = -5

if liczba > 0:
print("Liczba jest dodatnia")

print("Koniec programu")

#wynik:
#Koniec programu

Blok if został pominięty, ponieważ warunek był False.

Instrukcja else

Gdy potrzebujesz reakcji na „w przeciwnym wypadku”, używasz else.

if warunek:
# kod gdy warunek True
else:
# kod gdy warunek False

Przykład

liczba = -5

if liczba > 0:
    print("Liczba jest dodatnia")
else:
    print("Liczba nie jest dodatnia")

#wynik
#Liczba nie jest dodatnia

Jak to działa:

  • Warunek liczba > 0 to False
  • Python pomija blok if
  • Wykonuje blok else

Instrukcja elif

Gdy masz więcej niż dwa scenariusze, używasz elif (else if).

if warunek1:
    # kod gdy warunek1 True
elif warunek2:
    # kod gdy warunek1 False, ale warunek2 True
else:
    # kod gdy wszystkie warunki False

Przykład – klasyfikacja liczby

liczba = 0

if liczba > 0:
    print("Liczba jest dodatnia")
elif liczba == 0:
    print("Podano zero")
else:
    print("Liczba jest ujemna")

#wynik
#Podano zero

Jak to działa:

  • liczba > 0 to False – pomijamy
  • liczba == 0 to True – wykonujemy ten blok
  • Pomijamy resztę (else nie będzie wykonane)

Wiele warunków elif

Możesz mieć dowolną liczbę elif:

ocena = 85

if ocena >= 90:
    print("Ocena: 5")
elif ocena >= 80:
    print("Ocena: 4")
elif ocena >= 70:
    print("Ocena: 3")
elif ocena >= 60:
    print("Ocena: 2")
else:
    print("Ocena: 1")

#wynik
#Ocena: 4

Zagnieżdżanie instrukcji warunkowych

Możesz umieszczać instrukcje if wewnątrz innych instrukcji if.

wiek = 20
ma_prawo_jazdy = True

if wiek >= 18:
    print("Jesteś pełnoletni")
    
    if ma_prawo_jazdy:
        print("Możesz prowadzić samochód")
    else:
        print("Musisz zrobić prawo jazdy")
else:
    print("Jesteś niepełnoletni")

#wynik
#Jesteś pełnoletni
#Możesz prowadzić samochód

Operatory porównania w warunkach

UWAGA: w warunkach nie stosujemy pojedynczego znaku „=”

a = 10
b = 5

# Równość
if a == b:
    print("Równe")

# Nierówność
if a != b:
    print("Różne")

# Większe
if a > b:
    print("a jest większe od b")

# Mniejsze
if a < b:
    print("a jest mniejsze od b")

# Większe lub równe
if a >= b:
    print("a jest większe lub równe b")

# Mniejsze lub równe
if a <= b:
    print("a jest mniejsze lub równe b")

Operatory logiczne

and – i (oba warunki muszą być True)

wiek = 25
ma_prawo_jazdy = True

if wiek >= 18 and ma_prawo_jazdy:
    print("Możesz wypożyczyć samochód")

or – lub (przynajmniej jeden warunek True)

dzien = "sobota"

if dzien == "sobota" or dzien == "niedziela":
    print("Weekend!")

not – negacja

jest_deszcz = False

if not jest_deszcz:
    print("Nie potrzebujesz parasola")

Łączenie operatorów

wiek = 25
wzrost = 180
waga = 75

if (wiek >= 18 and wiek <= 40) and (wzrost >= 170 and waga <= 90):
    print("Spełniasz wymagania")

Operator in

Operator in sprawdza czy element znajduje się w kolekcji.

# Sprawdzanie w liście
owoce = ["jabłko", "banan", "gruszka"]

if "jabłko" in owoce:
    print("Jabłko jest na liście")

Przykład – walidacja wyboru

odpowiedz = input("Wybierz: papier, kamień lub nożyce: ")
odpowiedz = odpowiedz.lower()

opcje = ["papier", "kamień", "nożyce"]

if odpowiedz in opcje:
    print(f"Wybrałeś: {odpowiedz}")
else:
    print("Podałeś niepoprawną wartość")

#wynik
#Wybierz: papier, kamień lub nożyce: Papier
#Wybrałeś: papier

in z różnymi kolekcjami

# Lista
if "a" in ["a", "b", "c"]:
    print("Jest w liście")

# Krotka
if 5 in (1, 2, 3, 4, 5):
    print("Jest w krotce")

# Zestaw
if "Python" in {"Python", "Java", "C++"}:
    print("Jest w zestawie")

# Słownik (sprawdza klucze)
slownik = {"name": "Jan", "age": 25}
if "name" in slownik:
    print("Klucz 'name' istnieje")

# String (sprawdza podciąg)
if "Py" in "Python":
    print("'Py' jest w 'Python'")

Operator not in

Sprawdza czy elementu NIE MA w kolekcji.

name = "Kama"

if name not in ["Ania", "Kasia", "Zosia"]:
    print("Nie ma na liście")

#wynik
#Nie ma na liście

Operator not

Negacja wartości logicznej

cos = False

if not cos:
    print("Zmienna 'cos' jest False")

Różnica między not i !=

# != używamy do porównania dwóch wartości
a = 5
b = 10

if a != b:
    print("a nie równa się b")

# not używamy do negacji wartości logicznej
is_logged_in = False

if not is_logged_in:
    print("Użytkownik nie jest zalogowany")

Operator is vs ==

== sprawdza równość wartości

a = [1, 2, 3]
b = [1, 2, 3]

if a == b:
    print("Wartości są równe")  # To się wyświetli

is sprawdza tożsamość (ten sam obiekt w pamięci)

a = [1, 2, 3]
b = [1, 2, 3]
c = a

if a is b:
    print("To ten sam obiekt")  # To się NIE wyświetli

if a is c:
    print("To ten sam obiekt")  # To się wyświetli

Kiedy używać is:

  • Głównie do porównań z None
  • Porównań z True i False
x = None

# DOBRZE
if x is None:
    print("x jest None")

# ŹLE (działa, ale niezgodne z konwencją)
if x == None:
    print("x jest None")

Python nie ma switch/case

Uwaga: Python nie posiada konstrukcji switch znanej z C++, Java, JavaScript.

Zamiast switch używamy if-elif-else

wybor = 2

# W innych językach byłby switch
if wybor == 1:
    print("Opcja 1")
elif wybor == 2:
    print("Opcja 2")
elif wybor == 3:
    print("Opcja 3")
else:
    print("Nieznana opcja")

Alternatywa – słownik (od Python 3.10 jest match-case)

# Eleganckie rozwiązanie ze słownikiem
opcje = {
    1: "Opcja 1",
    2: "Opcja 2",
    3: "Opcja 3"
}

wybor = 2
print(opcje.get(wybor, "Nieznana opcja"))

Skrócony zapis (inline if)

Operator warunkowy (ternary)

# Pełny zapis
wiek = 20
if wiek >= 18:
    status = "Pełnoletni"
else:
    status = "Niepełnoletni"

# Skrócony zapis
wiek = 20
status = "Pełnoletni" if wiek >= 18 else "Niepełnoletni"

print(status)  # Pełnoletni

Składnia: wartość_gdy_true if warunek else wartość_gdy_false

Przykład praktyczny

# Określanie znaku liczby
liczba = -5
znak = "dodatnia" if liczba > 0 else "ujemna"

# Rabat
cena = 100
ile_sztuk = 5
rabat = 0.1 if ile_sztuk >= 10 else 0
cena_koncowa = cena * (1 - rabat)

# Przywitanie
pora_dnia = "rano"
powitanie = "Dzień dobry" if pora_dnia == "rano" else "Dobry wieczór"

Przykłady praktyczne

Przykład 1: Sprawdzanie parzystości

liczba = 8

if liczba == 0:
    print("Podano zero")
elif liczba % 2 == 0:
    print("Liczba jest parzysta")
else:
    print("Liczba jest nieparzysta")

Przykład 2: Porównywanie dwóch liczb

a = 10
b = 5

print(f"Porównujemy liczby {a} i {b}")

if a > b:
    print(f"Większa jest liczba a = {a}")
elif b > a:
    print(f"Większa jest liczba b = {b}")
else:
    print("Liczby są równe")

Przykład 3: Znajdowanie największej z czterech liczb

a, b, c, d = 10, 5, 18, 1

# Zakładamy że pierwsza jest największa
najwieksza = a

# Sprawdzamy pozostałe
if b > najwieksza:
    najwieksza = b

if c > najwieksza:
    najwieksza = c

if d > najwieksza:
    najwieksza = d

print(f"Największa liczba to: {najwieksza}")

Przykład 4: Prosty kalkulator

liczba1 = 10
liczba2 = 5
wybor = "+"

if wybor == "+":
    print(f"{liczba1} + {liczba2} = {liczba1 + liczba2}")
elif wybor == "-":
    print(f"{liczba1} - {liczba2} = {liczba1 - liczba2}")
elif wybor == "*":
    print(f"{liczba1} * {liczba2} = {liczba1 * liczba2}")
elif wybor == "/":
    if liczba2 != 0:
        print(f"{liczba1} / {liczba2} = {liczba1 / liczba2}")
    else:
        print("Nie można dzielić przez zero!")
else:
    print("Niepoprawny operator")

Przykład 5: Miesiące roku

nr = 3

if nr == 1:
    print("Styczeń")
elif nr == 2:
    print("Luty")
elif nr == 3:
    print("Marzec")
elif nr == 4:
    print("Kwiecień")
elif nr == 5:
    print("Maj")
elif nr == 6:
    print("Czerwiec")
elif nr == 7:
    print("Lipiec")
elif nr == 8:
    print("Sierpień")
elif nr == 9:
    print("Wrzesień")
elif nr == 10:
    print("Październik")
elif nr == 11:
    print("Listopad")
elif nr == 12:
    print("Grudzień")
else:
    print("Nieprawidłowy numer miesiąca")

Przykład 6: Sprawdzanie rozszerzenia pliku

filename = "01012020_sales.xlsx"

if filename.endswith(".xlsx"):
    print("TAK")
else:
    print("NIE")

Przykład 7: Sprawdzanie wielkich liter

code = "DSVNDOICSN"

if code.isupper():
    print("TAK")
else:
    print("NIE")

Przykład 8: Sprawdzanie typu zmiennej

number = 0

if isinstance(number, int):
    print("TAK")
else:
    print("NIE")

Przykład 9: Walidacja długości hasła

password = "cskdnjcasa#!"

if len(password) >= 11:
    print("Hasło poprawne")
else:
    print("Hasło zbyt krótkie")

Przykład 10: Złożona walidacja hasła

password = "cskdnjcasa#!"

if len(password) >= 11 and "!" in password:
    print("Hasło poprawne")
else:
    print("Hasło niepoprawne")

Przykład 11: Sprawdzanie i dodawanie do listy

project_ids = ["02134", "24253"]
project_id = "02135"

if project_id not in project_ids:
    project_ids.append(project_id)

print(project_ids)

Przykład 12: Modyfikacja słownika

project_ids = {
    "01": "open",
    "02": "new",
    "03": "in progress",
    "04": "completed"
}

if project_ids["02"] == "new":
    project_ids["02"] = "open"

print(project_ids)

Przykład 13: Usuwanie z listy

items = ["001", "000", "003", "005", "006"]
item = "001"

if item in items:
    items.remove(item)

print(items)

Zadania

Podstawy instrukcji warunkowych

  1. Stwórz zmienną temperatura z wartością 22. Jeśli temperatura jest większa niż 20, wyświetl „Ciepło”, w przeciwnym razie wyświetl „Zimno”.
  2. Pobierz od użytkownika liczbę. Sprawdź czy jest większa od 100 i wyświetl odpowiedni komunikat.
  3. Stwórz zmienną wiek z wartością 16. Sprawdź czy osoba jest pełnoletnia (wiek >= 18) i wyświetl odpowiednią informację.
  4. Pobierz od użytkownika jego imię. Jeśli imię to „Admin”, wyświetl „Witaj Administratorze!”, w przeciwnym razie wyświetl „Witaj użytkowniku!”.
  5. Stwórz zmienną haslo z jakąś wartością. Sprawdź czy hasło ma długość co najmniej 8 znaków. Wyświetl „Hasło akceptowalne” lub „Hasło za krótkie”.

Instrukcja elif

  1. Pobierz od użytkownika liczbę. Sprawdź czy jest dodatnia, ujemna czy równa zero. Wyświetl odpowiedni komunikat dla każdego przypadku.
  2. Stwórz zmienną ocena z wartością od 1 do 6. Wyświetl słowną interpretację oceny (1-ndst, 2-dop, 3-dst, 4-db, 5-bdb, 6-cel).
  3. Pobierz od użytkownika wiek. Sklasyfikuj osobę jako: dziecko (0-12), nastolatek (13-17), dorosły (18-64), senior (65+).
  4. Stwórz zmienną miesiąc z numerem miesiąca (1-12). Wyświetl do jakiej pory roku należy ten miesiąc (wiosna, lato, jesień, zima).
  5. Pobierz od użytkownika ocenę procentową (0-100). Przypisz ocenę literową według skali: A (90-100), B (80-89), C (70-79), D (60-69), F (0-59).

Operatory logiczne (and, or, not)

  1. Pobierz od użytkownika wiek i sprawdź czy ma prawo jazdy (zmienną bool). Jeśli ma co najmniej 18 lat I ma prawo jazdy, wyświetl „Możesz prowadzić samochód”.
  2. Stwórz zmienną dzien z nazwą dnia tygodnia. Sprawdź czy to sobota LUB niedziela i wyświetl „Weekend!” lub „Dzień roboczy”.
  3. Pobierz od użytkownika temperaturę. Sprawdź czy jest między 18 a 24 stopniami (włącznie). Jeśli tak, wyświetl „Komfortowa temperatura”.
  4. Stwórz zmienną jest_slonecznie (bool). Jeśli NIE jest słonecznie, wyświetl „Weź parasol”.
  5. Pobierz od użytkownika wzrost (w cm) i wagę (w kg). Jeśli wzrost jest powyżej 180 cm I waga poniżej 80 kg, wyświetl „Spełniasz wymogi”.
  6. Stwórz program sprawdzający czy rok jest przestępny. Rok jest przestępny jeśli: jest podzielny przez 4 I (nie jest podzielny przez 100 LUB jest podzielny przez 400).
  7. Pobierz od użytkownika dwie liczby. Sprawdź czy przynajmniej jedna z nich jest większa od 50.
  8. Stwórz zmienną pogoda (string) i temperatura (int). Jeśli pogoda to „deszcz” LUB temperatura jest poniżej 10, wyświetl „Zostań w domu”.

Operator in i not in

  1. Stwórz listę ulubionych kolorów. Pobierz od użytkownika kolor i sprawdź czy jest na liście. Wyświetl odpowiedni komunikat.
  2. Stwórz listę dostępnych rozmiarów ubrań [„S”, „M”, „L”, „XL”]. Pobierz od użytkownika rozmiar i sprawdź czy jest dostępny.
  3. Pobierz od użytkownika nazwę owocu. Sprawdź czy NIE znajduje się w liście owoców cytrusowych [„pomarańcza”, „cytryna”, „grejpfrut”, „mandarynka”].
  4. Stwórz krotkę z nazwami miesięcy letnich. Pobierz nazwę miesiąca i sprawdź czy jest to miesiąc letni.
  5. Stwórz słownik z kodami krajów (np. {„PL”: „Polska”, „DE”: „Niemcy”}). Pobierz kod kraju i sprawdź czy istnieje w słowniku.
  6. Pobierz od użytkownika adres email. Sprawdź czy zawiera znak „@”. Jeśli nie, wyświetl „Nieprawidłowy email”.
  7. Stwórz zestaw zabronionych słów. Pobierz od użytkownika komentarz i sprawdź czy zawiera któreś z zabronionych słów.

Zagnieżdżone instrukcje warunkowe

  1. Pobierz od użytkownika wiek i czy jest studentem. Jeśli ma co najmniej 18 lat, sprawdź czy jest studentem. Jeśli tak, wyświetl „Zniżka studencka 50%”, jeśli nie „Bilet normalny”.
  2. Pobierz trzy liczby. Sprawdź czy pierwsza jest największa. Jeśli tak, sprawdź czy druga jest większa od trzeciej.
  3. Pobierz temperaturę i czy pada deszcz (bool). Jeśli temperatura jest powyżej 20 stopni, sprawdź czy pada. Jeśli nie pada, wyświetl „Idealna pogoda na spacer”.
  4. Pobierz wzrost i wagę. Oblicz BMI (waga / wzrost²). Jeśli BMI jest poniżej 25, sprawdź czy jest powyżej 18.5 (zdrowy zakres).
  5. Pobierz liczbę. Sprawdź czy jest dodatnia. Jeśli tak, sprawdź czy jest parzysta czy nieparzysta.

Operator is i isinstance

  1. Stwórz zmienną z wartością None. Sprawdź czy jest None używając operatora is.
  2. Pobierz od użytkownika wartość. Sprawdź czy jest typu int używając isinstance().
  3. Stwórz dwie listy z takimi samymi wartościami. Porównaj je używając == i is. Wyjaśnij różnicę w komentarzu.
  4. Stwórz zmienną typu float. Sprawdź czy jest instancją klasy (int, float) używając isinstance() z krotką typów.
  5. Pobierz wartość od użytkownika. Sprawdź czy NIE jest None przed wykonaniem na niej operacji.

Zadania z matematyką

  1. Pobierz trzy długości boków. Sprawdź czy można z nich zbudować trójkąt (suma dwóch krótszych boków musi być większa od najdłuższego).
  2. Pobierz współrzędne punktu (x, y). Określ w której ćwiartce układu współrzędnych się znajduje (I, II, III, IV) lub czy leży na osi.
  3. Pobierz liczbę. Sprawdź czy jest liczbą pierwszą (podzielna tylko przez 1 i siebie).
  4. Pobierz rok. Sprawdź czy jest rokiem przestępnym i wyświetl ile dni ma luty w tym roku.
  5. Pobierz trzy liczby. Sprawdź czy tworzą ciąg arytmetyczny (różnica między kolejnymi liczbami jest stała).

Walidacja danych

  1. Pobierz numer telefonu. Sprawdź czy ma dokładnie 9 cyfr i zaczyna się od cyfry (nie zawiera liter).
  2. Pobierz adres email. Sprawdź czy zawiera „@” i „.” oraz czy „@” znajduje się przed „.”.
  3. Pobierz hasło. Sprawdź czy spełnia wymagania: minimum 8 znaków, zawiera wielką literę, małą literę i cyfrę.
  4. Pobierz kod pocztowy. Sprawdź czy ma format XX-XXX (dwie cyfry, myślnik, trzy cyfry).
  5. Pobierz numer PESEL (jako string). Sprawdź czy ma dokładnie 11 cyfr.
  6. Pobierz datę w formacie DD-MM-YYYY. Sprawdź czy miesiąc jest w zakresie 1-12 i dzień w zakresie 1-31.
  7. Pobierz login. Sprawdź czy ma od 3 do 20 znaków i zawiera tylko litery i cyfry.

Zadania ze stringami

  1. Pobierz nazwę pliku. Sprawdź rozszerzenie i określ typ pliku (obraz: jpg, png; dokument: pdf, docx; kod: py, js).
  2. Pobierz zdanie. Sprawdź czy zaczyna się wielką literą i kończy kropką.
  3. Pobierz tekst. Sprawdź czy składa się tylko z małych liter używając metody islower().
  4. Pobierz kod produktu. Sprawdź czy jest w formacie: trzy wielkie litery, myślnik, trzy cyfry (np. ABC-123).
  5. Pobierz imię. Sprawdź czy pierwsza litera jest wielka, a pozostałe małe.

Zadania z listami i kolekcjami

  1. Pobierz liczbę. Sprawdź czy znajduje się w liście liczb pierwszych [2, 3, 5, 7, 11, 13, 17, 19].
  2. Stwórz listę zakupów. Pobierz produkt i sprawdź czy jest na liście. Jeśli jest, usuń go. Jeśli nie ma, dodaj.
  3. Stwórz dwie listy z imionami. Pobierz imię i sprawdź w której liście się znajduje (lub w obu, lub w żadnej).
  4. Stwórz listę numerów kont bankowych. Pobierz numer konta i sprawdź czy jest na liście (jeśli nie, wyświetl „Konto nie istnieje”).
  5. Pobierz element. Sprawdź czy występuje jednocześnie w liście i w zestawie (dwie różne kolekcje).

Zadania ze słownikami

  1. Stwórz słownik z cenami produktów. Pobierz nazwę produktu i wyświetl cenę lub „Produkt niedostępny”.
  2. Stwórz słownik z danymi logowania (login: hasło). Pobierz login i hasło, sprawdź czy są poprawne.
  3. Stwórz słownik ze statusami zamówień. Pobierz numer zamówienia i wyświetl jego status lub „Zamówienie nie znalezione”.
  4. Stwórz słownik z tłumaczeniami (polskie: angielskie). Pobierz słowo polskie i wyświetl tłumaczenie.
  5. Stwórz słownik z punktacją graczy. Pobierz imię gracza i sprawdź czy przekroczył 100 punktów.

Zadania z wieloma warunkami

  1. Stwórz prosty system logowania: pobierz login i hasło. Sprawdź kilka warunków (czy pola nie są puste, czy login istnieje, czy hasło jest poprawne).
  2. Stwórz kalkulator rabatów: pobierz cenę i ilość. Zastosuj rabat: 5% dla 10-19 sztuk, 10% dla 20-49 sztuk, 15% dla 50+ sztuk.
  3. Stwórz system oceny ryzyka kredytowego: pobierz dochód, wiek i historię kredytową (bool). Określ poziom ryzyka: niskie, średnie, wysokie.
  4. Pobierz wagę przesyłki i odległość. Oblicz koszt dostawy według zasad: waga do 1kg: 10zł, 1-5kg: 15zł, 5kg+: 20zł. Odległość powyżej 100km dodaje 5zł.
  5. Stwórz system rezerwacji biletów: pobierz wiek, czy student, dzień tygodnia. Zastosuj odpowiednie zniżki (dzieci 50%, studenci 30%, senior 40%, weekend +20%).

Zadania z operatorem warunkowym (ternary)

  1. Pobierz liczbę. Używając operatora warunkowego przypisz do zmiennej „parzysta” lub „nieparzysta”.
  2. Pobierz temperaturę. Używając operatora warunkowego przypisz do zmiennej „ciepło” jeśli >20, w przeciwnym razie „zimno”.
  3. Pobierz dwie liczby. Używając operatora warunkowego przypisz większą z nich do zmiennej.
  4. Pobierz wiek. Używając operatora warunkowego przypisz „TAK” lub „NIE” do zmiennej oznaczającej pełnoletność.
  5. Pobierz ocenę (1-6). Używając operatora warunkowego przypisz „Zaliczone” dla ocen 3-6 lub „Niezaliczone” dla 1-2.

Zadania kompleksowe

  1. Stwórz quiz z 5 pytaniami. Dla każdej odpowiedzi sprawdź czy jest poprawna. Na końcu wyświetl wynik i ocenę (5 pkt – celujący, 4 pkt – bardzo dobry, itd.).
  2. Stwórz symulator bankomatu: pobierz PIN (sprawdź poprawność), wybierz operację (wypłata/wpłata/sprawdź saldo), wykonaj operację z walidacją.
  3. Stwórz kalkulator podatku: pobierz dochód roczny, oblicz podatek według progów podatkowych (17% do 120k, 32% powyżej), uwzględnij ulgę podatkową.
  4. Stwórz system parkingowego: pobierz typ pojazdu (samochód/motocykl/ciężarówka) i czas parkowania (w godzinach). Oblicz koszt według stawek: samochód 4zł/h, motocykl 2zł/h, ciężarówka 8zł/h. Pierwsze 15 minut gratis.
  5. Stwórz walidator daty: pobierz dzień, miesiąc, rok. Sprawdź czy data jest poprawna (uwzględnij różną liczbę dni w miesiącach i lata przestępne).
  6. Stwórz konwerter jednostek: pobierz wartość i jednostkę źródłową (km/m/cm), pobierz jednostkę docelową, wykonaj konwersję.
  7. Stwórz system rekomendacji filmów: pobierz wiek, gatunek filmowy (akcja/komedia/dramat/horror), czy lubi filmy zagraniczne (bool). Na podstawie kryteriów zaproponuj konkretny film.

PODSUMOWANIE

  • Instrukcja warunkowa wykonuje blok kodu tylko wtedy, gdy warunek ma wartość True.
  • Składnia if: słowo kluczowe, warunek, dwukropek :, a pod spodem blok z wcięciem 4 spacji. Wcięcie decyduje, co należy do bloku.
  • else nie ma warunku. Wykonuje się, gdy żaden wcześniejszy warunek nie był prawdziwy. Występuje najwyżej raz i zawsze na końcu.
  • elif to kolejne warunki sprawdzane od góry do dołu. Wykonuje się tylko pierwszy blok, którego warunek jest prawdziwy, a reszta jest pomijana. Dlatego kolejność warunków ma znaczenie.
  • Kilka osobnych if pod rząd to niezależne sprawdzenia (każdy jest oceniany osobno), a if-elif-else to jeden wybór z kilku opcji (jak w przykładzie szukania największej liczby).
  • Zagnieżdżanie: if wewnątrz if. Każdy poziom ma własne wcięcie.
  • W warunkach porównujemy przez ==. Pojedynczy = to przypisanie i w warunku jest błędem.
  • Operatory porównania: ==, !=, >, <, >=, <=.
  • Operatory logiczne: and (oba warunki prawdziwe), or (przynajmniej jeden prawdziwy), not (negacja). Kolejność: not, potem and, potem or. Gdy masz wątpliwości, użyj nawiasów.
  • in / not in sprawdzają, czy element jest w kolekcji: w liście, krotce i zestawie sprawdzają elementy, w słowniku klucze, w stringu podciąg.
  • not służy do negacji wartości logicznej (np. if not zalogowany:), a != do porównania dwóch wartości.
  • == porównuje wartości, is sprawdza, czy to ten sam obiekt. is stosujemy głównie z None: x is None, x is not None.
  • input() zawsze zwraca string, więc przed porównaniem liczbowym trzeba użyć int() lub float().
  • Python nie ma switch. Zamiast niego używamy if-elif-else albo słownika z .get().
  • Operator warunkowy (ternary): wartość_gdy_True if warunek else wartość_gdy_False.

Minimum, które powinno wejść w pamięć

Jeżeli masz zapamiętać tylko kilka rzeczy z tej lekcji, zapamiętaj te:

  1. Po if, elif i else zawsze dwukropek, a blok pod spodem ma wcięcie 4 spacji.
  2. W warunku piszemy ==, nie =.
  3. if-elif-else wykonuje tylko jeden blok, pierwszy z prawdziwym warunkiem. Warunki ustawiaj w sensownej kolejności.
  4. Kilka osobnych if to niezależne sprawdzenia, więc może wykonać się więcej niż jeden blok.
  5. input() zwraca tekst. Do porównań liczbowych użyj int(input(...)) albo float(input(...)).
  6. and – oba prawdziwe, or – przynajmniej jeden prawdziwy, not – odwrócenie. Kolejność: not, and, or.
  7. in w słowniku sprawdza klucze, w stringu podciąg.
  8. is None / is not None do sprawdzania None. Do porównywania wartości służy ==.
  9. Podzielność i parzystość: liczba % 2 == 0.
  10. Python nie ma switch. Używamy if-elif-else albo słownika.

Ściągawka – najważniejsze polecenia i składnia

Schemat instrukcji warunkowej

if warunek1:
    instrukcje
elif warunek2:
    instrukcje
else:
    instrukcje

Operatory

RodzajOperatoryZnaczenie
Porównania== !=równe / różne
 > < >= <=większe, mniejsze, większe lub równe, mniejsze lub równe
Logiczneand or noti / lub / negacja
Przynależnośćin not injest / nie ma w kolekcji
Tożsamośćis is notten sam obiekt / inny obiekt

in w różnych kolekcjach

KolekcjaCo sprawdzaPrzykład
lista, krotka, zestawelementy"a" in ["a", "b"]
słownikklucze"name" in slownik
stringpodciąg"Py" in "Python"

Operator warunkowy (ternary)

status = "Pełnoletni" if wiek >= 18 else "Niepełnoletni"

Zamiast switch: słownik

print(opcje.get(wybor, "Nieznana opcja"))

Najczęściej używane wzorce

liczba % 2 == 0                 # parzysta
najwieksza = a                  # zakładamy, że pierwsza jest największa,
if b > najwieksza:              # a potem sprawdzamy pozostałe
    najwieksza = b
if x is None: ...               # sprawdzenie None
if odpowiedz.lower() in opcje:  # odporne na wielkość liter
if element not in lista:        # dodaj, jeśli jeszcze go nie ma
    lista.append(element)

Metody i funkcje przydatne w warunkach (z lekcji)

ZapisCo sprawdza
len(tekst) == 11długość
nazwa.endswith(".xlsx")zakończenie tekstu
kod.isupper()czy same wielkie litery
isinstance(x, int)typ zmiennej

Typowe błędy

BłądPoprawnie
if x = 5:if x == 5:
if x == 5 (brak :)if x == 5:
brak wcięcia pod if4 spacje wcięcia
if wiek >= 18: gdzie wiek = input()wiek = int(input())
if x == None:if x is None:
elif bez wcześniejszego ifzawsze zaczynamy od if
warunki ułożone od najszerszego (>= 60 przed >= 80)od najbardziej szczegółowego

Quiz – sprawdź się

Pytanie 1. Python nie ma instrukcji switch. Podaj dwa sposoby z lekcji, którymi można ją zastąpić.

Pytanie 2. Co zostanie wyświetlone?

x = 7

if x > 5:
    print("A")
if x > 6:
    print("B")
elif x > 3:
    print("C")
else:
    print("D")

Pytanie 3. Co zostanie wyświetlone? Jaki jest tu błąd w logice i jak go naprawić?

punkty = 85

if punkty >= 60:
    print("dst")
elif punkty >= 80:
    print("db")
elif punkty >= 90:
    print("bdb")

Pytanie 4. Dlaczego ten program zgłosi błąd (TypeError) i jak go poprawić?

wiek = input("Podaj wiek: ")

if wiek >= 18:
    print("Pełnoletni")

Pytanie 5. Znajdź 4 błędy w kodzie.

temp = 15

if temp = 20
print("Ciepło")
else
    print("Zimno")

Pytanie 6. Co zostanie wyświetlone (cztery linie)?

a = 4
b = 9

print(a > 3 and b < 5)
print(a > 3 or b < 5)
print(not a == 4)
print(a > 3 and not b < 5)

Pytanie 7. Uzupełnij puste miejsca tak, aby program wyświetlił „Wejście dozwolone”.

dozwolone = ["admin", "ola", "kuba"]
login = "Ola".____()

if login ____ dozwolone:
    print("Wejście dozwolone")
else:
    print("Brak dostępu")

Pytanie 8. Co zostanie wyświetlone (cztery linie)?

dane = {"imie": "Jan", "wiek": 25}

print("Jan" in dane)
print("imie" in dane)
print("an" in "Jan")
print(25 not in (10, 20, 30))

Pytanie 9. Co zostanie wyświetlone? Wyjaśnij różnicę między == a is. Jak poprawnie sprawdzić, czy zmienna x ma wartość None?

a = [1, 2]
b = [1, 2]
c = a

print(a == b, a is b, a is c)

Pytanie 10. Co zostanie wyświetlone?

wiek = 20
ma_bilet = False

if wiek >= 18:
    if ma_bilet:
        print("Wejście")
    else:
        print("Kup bilet")
else:
    print("Za młody")

Pytanie 11. Zapisz w jednej linii, używając operatora warunkowego (ternary):

if punkty >= 50:
    wynik = "zaliczone"
else:
    wynik = "niezaliczone"

Pytanie 12 (zadanie praktyczne). Napisz program, który pobiera od użytkownika liczbę całkowitą i wyświetla: „zero”, „parzysta” albo „nieparzysta”.

Pytanie 13 (zadanie praktyczne). Napisz program, który pobiera od użytkownika cenę produktu i liczbę sztuk. Jeśli sztuk jest co najmniej 10, naliczany jest rabat 10%. Wyświetl cenę końcową za jedną sztukę.

Odpowiedzi

1. Łańcuch if-elif-else oraz słownik z metodą .get(), np. opcje.get(wybor, "Nieznana opcja"). (Lekcja wspomina też match-case od Pythona 3.10, ale go nie omawia.)

2. Wynik:

A
B

Pierwszy if jest niezależny i wypisuje „A”. Drugi blok to osobny łańcuch: x > 6 jest prawdziwe, więc wypisuje „B”, a elif i else są pomijane.

3. Wynik: dst. Warunek punkty >= 60 jest prawdziwy już dla 85, więc pozostałe elif nie są sprawdzane. Naprawa: ustawić warunki od najwyższego progu (>= 90, potem >= 80, potem >= 60).

4. input() zwraca string, a porównanie napisu z liczbą 18 powoduje TypeError. Poprawnie: wiek = int(input("Podaj wiek: ")).

5. Błędy:

  • = zamiast == w warunku (temp = 20),
  • brak dwukropka po if temp == 20,
  • brak wcięcia przy pierwszym print,
  • brak dwukropka po else.

Poprawnie:

temp = 15

if temp == 20:
    print("Ciepło")
else:
    print("Zimno")

6.

False
True
False
True
  • a > 3 and b < 5: True and False, więc False,
  • a > 3 or b < 5: True or False, więc True,
  • not a == 4: porównanie wykonuje się przed not, czyli not True, więc False,
  • a > 3 and not b < 5: True and not False, więc True.

7. lower oraz in:

login = "Ola".lower()

if login in dozwolone:

8.

False
True
True
True

W słowniku in sprawdza klucze, a nie wartości, więc „Jan” (wartość) daje False. W stringu in sprawdza podciąg.

9. Wynik: True False True. a == b jest prawdziwe, bo listy mają takie same wartości. a is b jest fałszywe, bo to dwa różne obiekty. a is c jest prawdziwe, bo c wskazuje na ten sam obiekt co a. == porównuje wartości, a is sprawdza tożsamość obiektu. Sprawdzenie None: if x is None:.

10. Wynik: Kup bilet. Zewnętrzny warunek (wiek >= 18) jest prawdziwy, a ma_bilet ma wartość False, więc wykonuje się wewnętrzny else.

11.

wynik = "zaliczone" if punkty >= 50 else "niezaliczone"

12. Przykładowe rozwiązanie:

liczba = int(input("Podaj liczbę: "))

if liczba == 0:
    print("zero")
elif liczba % 2 == 0:
    print("parzysta")
else:
    print("nieparzysta")

Warunek dla zera musi być pierwszy, bo 0 % 2 == 0 też jest prawdziwe.

13. Przykładowe rozwiązanie:

cena = float(input("Podaj cenę: "))
ile_sztuk = int(input("Podaj liczbę sztuk: "))

if ile_sztuk >= 10:
    cena_koncowa = cena * 0.9
else:
    cena_koncowa = cena

print(f"Cena końcowa za sztukę: {cena_koncowa}")

Test: cena 100 i 5 sztuk daje 100.0, cena 100 i 10 sztuk daje 90.0.