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żyjbreak. - 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" > 2to błąd. Konwertuj:int(),str(). breakvsreturn–breakprzerywa pętlę,returnkończy funkcję.
12) Zadania do samodzielnego zrobienia
- Kalkulator powtarzalny
Menu:+,-,*,/,q. Pobieraj dwie liczby, pokazuj wynik;qkończy. - Licznik samogłosek i spółgłosek
Pobierz napis, policz samogłoski i spółgłoski (pomijaj spacje i znaki specjalne). - Suma liczb parzystych do
n
Użytkownik podajen. Policz sumę parzystych od 1 don(pętla albosum(range(...))). - Znajdź min i max
Wczytaj liczby rozdzielone spacją, zamień naint, wypisz min i max bez użycia wbudowanychmin/max(napisz własną pętlę). - Walidator PIN
Pytaj o PIN aż do wpisania 4-cyfrowego ciągu (isdigit()ilen == 4). Po poprawnym wpisie wypisz „OK”.
Co zabierasz z odcinka?
- Budujesz warunki:
if/elif/else, operator trójargumentowy, łańcuchowe porównania. - Znasz
match–casedo przejrzystych menu i wariantów. - Używasz pętli
whileifor,range,break,continue, pętlowegoelse. - Korzystasz z
enumerate,zip,any,all,sum,min/maxzkey. - Rozpoznajesz typowe pułapki i wiesz, jak je omijać.

