Odc. 4/15. Warunki i pętle w praktyce (if/elif/else, match–case, while, for, break/continue, enumerate, zip)

foto kurs pythona odcinek 4

Cel odcinka: po lekturze napiszesz programy, które podejmują decyzje i powtarzają czynności. Poznasz praktyczne skróty, unikniesz typowych pułapek i zobaczysz, jak pisać kod czytelnie.


1) „Prawda” i „fałsz” w Pythonie (truthiness – co jest traktowane jak False?)

W warunkach if Python uznaje za False:
False, None, 0, 0.0, 0j, puste: "", [], {}, set(), range(0)
Wszystko inne jest True.

if []:
    print("Pusta lista to True")
else:
    print("Pusta lista to False")  # wypisze się to

Tip: zamiast if len(lista) > 0: pisz po prostu if lista:.
Działa też odwrotnie: if not lista: → „lista pusta”.


2) if / elif / else – podejmowanie decyzji

age = int(input("Ile masz lat? "))

if age < 0:
    print("Błędny wiek.")
elif age < 18:
    print("Niepełnoletni.")
elif age < 65:
    print("Dorosły.")
else:
    print("Senior.")

Łańcuchowe porównania (czytelniej niż z and)

x = 10
if 5 < x < 15:   # zamiast: 5 < x and x < 15
    print("x w zakresie (5,15)")

Operator warunkowy (krótka forma)

status = "pełnoletni" if age >= 18 else "niepełnoletni"

Pułapka: w warunku używaj == do porównania.
if x = 5: ❌ (błąd) — poprawnie: if x == 5:


3) match – case (Python 3.10+) – czytelne dopasowanie wariantów

Świetny zamiennik wielu elif: menu, kody, proste parsery.

Upewnij się, że masz Python 3.10 lub nowszy.

cmd = input("Wybierz [start|stop|help]: ").strip()

match cmd:
    case "start":
        print("Uruchamiam…")
    case "stop":
        print("Zatrzymuję…")
    case "help" | "h":
        print("Pomoc…")
    case _:
        print("Nieznane polecenie")

Dopasowanie kształtu danych (np. krotki):

point = (10, 20)

match point:
    case (0, y):
        print("Na osi Y, y =", y)
    case (x, 0):
        print("Na osi X, x =", x)
    case (x, y):
        print(f"Punkt ({x},{y})")

4) Pętla while – powtarzaj, dopóki warunek jest True

i = 0
while i < 3:
    print("i =", i)
    i += 1

Walidacja danych (praktyka):

while True:
    txt = input("Podaj liczbę całkowitą: ")
    if txt.lstrip("-").isdigit():
        n = int(txt)
        break
    print("To nie jest liczba. Spróbuj ponownie.")

Uwaga: uważaj na pętle nieskończone. Warunek musi kiedyś stać się False albo użyj break.


5) Pętla for – przejście po elementach

for przechodzi po kolekcjach: listach, napisach, zbiorach, słownikach…

for ch in "Python":
    print(ch)

range() – sekwencja liczb:

for i in range(5):        # 0,1,2,3,4
    print(i)

for i in range(2, 10, 2): # 2,4,6,8
    print(i)

Po słowniku:

user = {"name":"Ala", "age":21, "city":"Gdańsk"}

for key in user:                 # po kluczach
    print(key, user[key])

for key, val in user.items():    # po parach
    print(key, "=>", val)

6) break, continue i pętlowe else

# szukamy pierwszej parzystej
nums = [3, 7, 9, 12, 15]
for n in nums:
    if n % 2 == 0:
        print("Znalazłem parzystą:", n)
        break
else:
    # ten else wykona się tylko, gdy pętla NIE trafiła na break
    print("Brak parzystych.")
# pomijanie niektórych elementów
for n in range(10):
    if n % 2 == 0:
        continue
    print("nieparzysta:", n)

7) enumerate, zip – iteracja jak profesjonalista

enumerate() – indeks + wartość:

names = ["Ala", "Ola", "Ela"]
for i, name in enumerate(names, start=1):
    print(i, name)  # 1 Ala, 2 Ola, 3 Ela

zip() – łączenie kilku list w pary/wiersze:

names  = ["Ala", "Ola", "Ela"]
scores = [90, 85, 100]

for name, score in zip(names, scores):
    print(name, "=>", score)

8) any, all, sum, min/max z key – krótkie i mocne

nums = [3, 5, 0, 7]
print(any(nums))   # True  (jest coś „prawdziwego”)
print(all(nums))   # False (jest 0 → falsy)
print(sum(nums))   # 15

Wybór „najlepszego” elementu:

words = ["python", "ai", "programowanie"]
print(max(words, key=len))  # 'programowanie' (najdłuższe)
print(min(words, key=len))  # 'ai' (najkrótsze)

9) Pętle vs. list comprehension vs. generator

Klasyczna pętla:

even = []
for n in range(10):
    if n % 2 == 0:
        even.append(n)

Comprehension (krócej, czytelnie):

even = [n for n in range(10) if n % 2 == 0]

Generator (oszczędza pamięć):

total = sum(n*n for n in range(10))

10) Mini-projekty (praktyka)

A) Menu konsolowe z match-case

while True:
    cmd = input("[1] Dodaj  [2] Lista  [q] Wyjście: ").strip()
    match cmd:
        case "1":
            print("Dodaję (tu logika dodawania)…")
        case "2":
            print("Wyświetlam (tu logika listy)…")
        case "q" | "Q":
            print("Pa!")
            break
        case _:
            print("Nieznana opcja.")

B) FizzBuzz (klasyk)

for n in range(1, 21):
    if n % 15 == 0:
        print("FizzBuzz")
    elif n % 3 == 0:
        print("Fizz")
    elif n % 5 == 0:
        print("Buzz")
    else:
        print(n)

C) Sprawdzanie liczby pierwszej

n = int(input("Podaj n: "))
if n < 2:
    print("Nie jest pierwsza.")
else:
    for d in range(2, int(n**0.5) + 1):
        if n % d == 0:
            print("Złożona (dzieli się przez", d, ")")
            break
    else:
        print("Pierwsza.")

D) Walidacja hasła – pętla do skutku

while True:
    pwd = input("Hasło (min 8 znaków): ")
    if len(pwd) >= 8:
        print("OK")
        break
    print("Za krótkie, spróbuj ponownie.")

11) Typowe pułapki i szybkie remedia

  • Nieskończona while – upewnij się, że warunek się zmienia, albo użyj break.
  • Modyfikacja listy w for – może „gubić” elementy. Iteruj po kopii: for x in lista[:].
  • Wcięcia – mieszanie tabów i spacji = IndentationError. Ustaw edytor na 4 spacje.
  • Mieszanie typów"10" > 2 to błąd. Konwertuj: int(), str().
  • break vs returnbreak przerywa pętlę, return kończy funkcję.

12) Zadania do samodzielnego zrobienia

  1. Kalkulator powtarzalny
    Menu: +, -, *, /, q. Pobieraj dwie liczby, pokazuj wynik; q kończy.
  2. Licznik samogłosek i spółgłosek
    Pobierz napis, policz samogłoski i spółgłoski (pomijaj spacje i znaki specjalne).
  3. Suma liczb parzystych do n
    Użytkownik podaje n. Policz sumę parzystych od 1 do n (pętla albo sum(range(...))).
  4. Znajdź min i max
    Wczytaj liczby rozdzielone spacją, zamień na int, wypisz min i max bez użycia wbudowanych min/max (napisz własną pętlę).
  5. Walidator PIN
    Pytaj o PIN aż do wpisania 4-cyfrowego ciągu (isdigit() i len == 4). Po poprawnym wpisie wypisz „OK”.

Co zabierasz z odcinka?

  • Budujesz warunki: if/elif/else, operator trójargumentowy, łańcuchowe porównania.
  • Znasz match–case do przejrzystych menu i wariantów.
  • Używasz pętli while i for, range, break, continue, pętlowego else.
  • Korzystasz z enumerate, zip, any, all, sum, min/max z key.
  • Rozpoznajesz typowe pułapki i wiesz, jak je omijać.