Szybki quiz – przypomnienie poprzedniej lekcji
Pytanie 1. Co zostanie wyświetlone?
liczba = 0
if liczba > 0:
print("A")
elif liczba == 0:
print("B")
else:
print("C")
Pytanie 2. Znajdź błąd w kodzie i popraw go.
wiek = 20
if wiek = 18:
print("Dokładnie 18 lat")
Pytanie 3. Co zostanie wyświetlone?
wiek = 17
ma_prawo_jazdy = True
if wiek >= 18 or ma_prawo_jazdy:
print("TAK")
else:
print("NIE")
Pytanie 4. Co należy wpisać w miejsce ___, aby program wypisał komunikat, gdy imienia nie ma na liście?
imiona = ["Ania", "Kasia", "Zosia"]
if "Marek" ___ imiona:
print("Nie ma na liście")
Pytanie 5. Co zostanie wyświetlone? Jak zmieni się wynik, jeżeli drugie if zamienisz na elif?
x = 7
if x > 5:
print("A")
if x > 3:
print("B")
Pytanie 6. Jaką wartość będzie miała zmienna wynik?
liczba = -5
wynik = "dodatnia" if liczba > 0 else "niedodatnia"
Pytanie 7. Co zostanie wyświetlone? Wyjaśnij różnicę między == a is.
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b, a is b)
Odpowiedzi
B– pierwszy warunek jest fałszywy, drugi prawdziwy, więcelsejest pomijane.- W warunku trzeba użyć
==zamiast=. Poprawnie:if wiek == 18:. Pojedyncze=służy do przypisania. TAK– przyorwystarczy, że jeden warunek jest prawdziwy (ma_prawo_jazdytoTrue).not in- Wyświetli się
A, a potemB, bo każdeifjest sprawdzane niezależnie. Po zamianie naelifwyświetli się tylkoA, boelifjest pomijane, gdy poprzedni warunek był prawdziwy. "niedodatnia"True False.==porównuje wartości (listy mają tę samą zawartość).issprawdza, czy to ten sam obiekt w pamięci (aibto dwie osobne listy).
Pętle (iteracje) to instrukcje pozwalające wielokrotnie powtarzać fragment kodu. Zamiast pisać ten sam kod setki razy, używamy pętli, która wykona go automatycznie tyle razy, ile potrzeba.
Dwa rodzaje pętli w Pythonie:
- for – gdy wiesz ile razy chcesz powtórzyć kod (iteracja po kolekcji)
- while – gdy powtarzasz dopóki warunek jest prawdziwy
Pętla for…
for element in kolekcja:
# kod do wykonania dla każdego elementu
Jak to działa:
- Python przechodzi przez każdy element kolekcji
- W każdej iteracji element jest przypisywany do zmiennej
- Wykonywany jest kod w bloku (z wcięciem)
Funkcja range()
Funkcja range() generuje sekwencję liczb – często używana z pętlą for.
range(stop) – od 0 do stop-1
# Liczby od 0 do 9
for i in range(10):
print(i, end=", ")
# Wynik: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
range(start, stop) – od start do stop-1
# Liczby od 5 do 9
for i in range(5, 10):
print(i, end=", ")
# Wynik: 5, 6, 7, 8, 9,
range(start, stop, step) – z krokiem
# Liczby nieparzyste od 1 do 10
for i in range(1, 11, 2):
print(i, end=", ")
# Wynik: 1, 3, 5, 7, 9,
# Liczby parzyste
for i in range(0, 11, 2):
print(i, end=", ")
# Wynik: 0, 2, 4, 6, 8, 10,
range() z ujemnym krokiem
# Odliczanie w dół
for i in range(10, 0, -1):
print(i, end=", ")
# Wynik: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
Pętla for z listami
Iteracja po elementach
lista = ["element1", 10, 22.4, [1, 2, 3]]
for element in lista:
print("Element listy:", element)
Wynik:
Element listy: element1
Element listy: 10
Element listy: 22.4
Element listy: [1, 2, 3]
Iteracja z indeksem
owoce = ["jabłko", "banan", "gruszka"]
# Metoda 1: enumerate()
for index, owoc in enumerate(owoce):
print(f"{index}: {owoc}")
# Wynik:
# 0: jabłko
# 1: banan
# 2: gruszka
# Metoda 2: range() z len()
for i in range(len(owoce)):
print(f"{i}: {owoce[i]}")
Pętla for z krotkami
foods = ('Pizza', 'Burgers', 'Kebab')
for food in foods:
print("Food is:", food)
Wynik:
Food is: Pizza
Food is: Burgers
Food is: Kebab
Pamiętaj: Krotki są niemutowalne – nie możesz ich zmienić wewnątrz pętli.
Pętla for ze stringami
word = "Python"
for letter in word:
print(letter)
Wynik:
P
y
t
h
o
n
Przykład – zliczanie liter
text = "Uwielbiam Python!"
licznik_spacji = 0
for znak in text:
if znak == " ":
licznik_spacji += 1
print(f"Liczba spacji: {licznik_spacji}")
Pętla for ze słownikami
Iteracja po kluczach
osoba = {
"name": "Kama",
"surname": "Kaczmarek",
"mail": "kamakaczmarek@zse-zdwola.pl"
}
# Domyślnie iteracja po kluczach
for key in osoba:
print(key)
# Lub jawnie
for key in osoba.keys():
print(key)
Wynik
name
surname
mail
Iteracja po wartościach
osoba = {
"name": "Kama",
"surname": "Kaczmarek",
"mail": "kamakaczmarek@zse-zdwola.pl"
}
for value in osoba.values():
print(value)
Wynik
Kama
Kaczmarek
kamakaczmarek@zse-zdwola.pl
Iteracja po kluczach i wartościach
osoba = {
"name": "Kama",
"surname": "Kaczmarek",
"mail": "kamakaczmarek@zse-zdwola.pl"
}
for key, value in osoba.items():
print(f"{key}: {value}")
Wynik
name: Kama
surname: Kaczmarek
mail: kamakaczmarek@zse-zdwola.pl
Przykład – filtrowanie słownika
users = {
"Anna": "active",
"Jakub": "inactive",
"Kasia": "inactive",
"Robert": "active",
}
# Tworzymy nowy słownik tylko z aktywnymi użytkownikami
active_users = {}
for user, status in users.items():
if status == "active":
active_users[user] = status
print(active_users)
# {'Anna': 'active', 'Robert': 'active'}
Pętla for z input()
menu = ['Pizza', 'Burger', 'Fish']
for food in menu:
if food == 'Pizza':
pizza_type = input("Jaki rodzaj pizzy chcesz? ")
size = input("Jaki rozmiar? ")
print(f"Zamówiłeś {size} pizzę {pizza_type}")
else:
print(f"Wybrałeś: {food}")
Zagnieżdżone pętle for
Przykład – tabliczka mnożenia
print("TABLICZKA MNOŻENIA")
print()
for i in range(1, 11):
for j in range(1, 11):
wynik = i * j
print(f"{wynik:4}", end="") # :4 wyrównuje do 4 znaków
print() # Nowa linia po każdym wierszu
Przykład – trójkąt z gwiazdek
# Trójkąt prostokątny
x = 5
for i in range(x):
print("*" * (i + 1))
Wynik
*
**
***
****
*****
Przykład – trójkąt równoboczny
x = 5
for w in range(x):
# Spacje
for s in range(x - w - 1):
print(" ", end="")
# Gwiazdki
for g in range(2 * w + 1):
print("*", end="")
print() # Nowa linia
Wynik
*
***
*****
*******
*********
Przykłady praktyczne z for
Przykład 1: 100 kolejnych liczb
print("Liczby od 3 do 102:")
for i in range(3, 103):
if i < 102:
print(i, end=", ")
else:
print(i) # Ostatnia bez przecinka
Przykład 2: Silnia
n = 5
silnia = 1
for i in range(2, n + 1):
silnia *= i
print(f"{n}! = {silnia}")
# 5! = 120
Przykład 3: Ciąg Fibonacciego
n = 10
if n <= 2:
print(f"{n} elementem ciągu Fibonacciego jest 1")
else:
f1 = 0
f2 = 1
print("Ciąg Fibonacciego:", end=" ")
print(f1, f2, end=", ")
for i in range(2, n):
fn = f1 + f2
print(fn, end=", ")
f1 = f2
f2 = fn
print(f"\n{n} elementem ciągu jest {f2}")
Pętle while…
Pętla while wykonuje kod dopóki warunek jest prawdziwy.
Korzystając z pętli while musimy uważać, żeby nie pominąć warunku zatrzymania pętli. Jeżeli tego nie zrobimy, pętla będzie wykonywała się w nieskończoność.
Działanie pętli: dopóki warunek jest spełniony, wykonuj akcję i zwiększ o…
while warunek:
# kod do wykonania
# WAŻNE: zmień zmienną by warunek kiedyś był False!
Prosty przykład
i = 0
while i < 10:
print(i, end=", ")
i += 1 # WAŻNE - zwiększamy i!
# Wynik: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
Nieskończona pętla (BŁĄD)
# ŹLE - NIESKOŃCZONA PĘTLA!
i = 0
while i < 10:
print(i)
# Brak i += 1 - pętla nigdy się nie zatrzyma!
Jak zatrzymać: Ctrl+C (Windows/Linux) lub Cmd+C (Mac)
Przykłady praktyczne z while
Przykład 1: Liczby mniejsze od x
x = 10
licznik = 0
print(f"Liczby całkowite mniejsze od {x}:")
while licznik < x:
print(licznik)
licznik += 1
Przykład 2: Napisz skrypt wyznaczający NWD (największy wspólny dzielnik).
a = 48
b = 18
print(f"Szukamy NWD dla {a} i {b}")
while a != b:
if a > b:
a -= b
else:
b -= a
nwd = a # lub b - obie zmienne są równe
print(f"NWD = {nwd}")
Przykład 3: Napisz skrypt wyświetlający ciąg Fibonacciego
a, b = 0, 1
print("Ciąg Fibonacciego do 100:")
while a < 100:
print(a, end=" ")
a, b = b, a + b
print()
Przykład 4: Zgadywanie liczby
sekret = 42
proba = 0
while proba != sekret:
proba = int(input("Zgadnij liczbę: "))
if proba < sekret:
print("Za mało!")
elif proba > sekret:
print("Za dużo!")
else:
print("Brawo! Zgadłeś!")
Zatrzymywanie pętli i skryptu
Działanie pętli lub skryptu możemy przerwać w dowolnej chwili lub możemy pominąć część instrukcji do wykonania:
- instrukcja continue powoduje przeskoczenie do następnego obiegu pętli
- instrukcja break powoduje natychmiastowe wyjście z pętli
Przerywanie działania pętli za pomocą instrukcji break
Przykład z for
for i in range(1, 101):
print(i)
if i >= 10:
break
print("Pętla zakończona")
Wynik
1
2
3
4
5
6
7
8
9
10
Pętla zakończona
Przykład z while
i = 0
while True: # Nieskończona pętla
print(i)
i += 1
if i >= 5:
break # Wychodzimy z pętli
print("Zakończono")
Praktyczny przykład – wyszukiwanie w liście
liczby = [10, 23, 5, 67, 89, 3, 45]
szukana = 67
for liczba in liczby:
if liczba == szukana:
print(f"Znaleziono {szukana}!")
break
else:
# else wykonuje się gdy pętla NIE została przerwana przez break
print(f"Nie znaleziono {szukana}")
Przeskok do następnej iteracji (obiegu pętli) za pomocą instrukcji continue
Przykład – tylko liczby parzyste
for i in range(1, 11):
if i % 2 != 0:
continue # Pomiń nieparzyste
print(i, end=", ")
# Wynik: 2, 4, 6, 8, 10,
Przykład – pomijanie wartości None
dane = [10, None, 20, None, 30, 40]
for element in dane:
if element is None:
continue # Pomiń None
print(element * 2)
# Wynik:
# 20
# 40
# 60
# 80
Przykład – filtrowanie listy
liczby = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("Liczby większe od 5:")
for liczba in liczby:
if liczba <= 5:
continue
print(liczba, end=" ")
# Wynik: 6 7 8 9 10
List Comprehension – skrócona konstrukcja listy
List comprehension to zwięzły i szybki sposób tworzenia listy na podstawie istniejącej sekwencji (listy, range, string, generatora itp.).
Podstawowa składnia
[nowy_element for element in kolekcja]
Przykład 1 — Kwadraty liczb
# Tradycyjna metoda
kwadraty = []
for x in range(5):
kwadraty.append(x * x)
print(kwadraty) # [0, 1, 4, 9, 16]
# List comprehension
kwadraty = [x * x for x in range(5)]
print(kwadraty) # [0, 1, 4, 9, 16]
Przykład 2 — z warunkiem (filtrowanie)
# Tylko liczby parzyste
parzyste = [x for x in range(10) if x % 2 == 0]
print(parzyste) # [0, 2, 4, 6, 8]
# Tylko dodatnie
liczby = [-5, 3, -1, 7, -2, 8]
dodatnie = [x for x in liczby if x > 0]
print(dodatnie) # [3, 7, 8]
Przykład 3 — z funkcją
# Długości słów
words = ["python", "lista", "comprehension"]
lengths = [len(w) for w in words]
print(lengths) # [6, 5, 12]
# Wielkie litery
wyrazy = ["ala", "ma", "kota"]
wielkie = [w.upper() for w in wyrazy]
print(wielkie) # ['ALA', 'MA', 'KOTA']
Przykład 4 — zagnieżdżone pętle
# Pary liczb
pairs = [(x, y) for x in range(3) for y in range(3)]
print(pairs)
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
# Tabliczka mnożenia (fragment)
mnozenie = [(x, y, x * y) for x in range(1, 4) for y in range(1, 4)]
print(mnozenie)
# [(1, 1, 1), (1, 2, 2), (1, 3, 3), (2, 1, 2), ...]
Przykład 5: If-else w comprehension
# "parzysta" lub "nieparzysta"
liczby = [1, 2, 3, 4, 5]
opis = ["parzysta" if x % 2 == 0 else "nieparzysta" for x in liczby]
print(opis)
# ['nieparzysta', 'parzysta', 'nieparzysta', 'parzysta', 'nieparzysta']
Dict Comprehension – tworzenie słownika
Dict comprehension działa podobnie jak list comprehension, ale tworzy słownik (dict).
Podstawowa składnia
{klucz: wartosc for element in kolekcja}
Przykład 1 — słownik kwadratów
kwadraty = {x: x * x for x in range(6)}
print(kwadraty)
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Przykład 2 — filtr w dict comprehension
# Tylko parzyste
parzyste_kwadraty = {x: x * x for x in range(10) if x % 2 == 0}
print(parzyste_kwadraty)
# {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
Przykład 3 — odwracanie słownika
original = {"a": 1, "b": 2, "c": 3}
odwrocony = {v: k for k, v in original.items()}
print(odwrocony)
# {1: 'a', 2: 'b', 3: 'c'}
Przykład 4 — Długości słów
words = ["python", "dict", "comprehension"]
lengths = {word: len(word) for word in words}
print(lengths)
# {'python': 6, 'dict': 4, 'comprehension': 12}
Przykład 5 – Lambda
words = ["python", "lambda", "map"]
lengths = {w: (lambda x: len(x))(w) for w in words}
print(lengths)
# {'python': 6, 'lambda': 6, 'map': 3}
Set Comprehension
# Zestaw kwadratów
kwadraty = {x * x for x in range(-5, 6)}
print(kwadraty)
# {0, 1, 4, 9, 16, 25} - duplikaty automatycznie usunięte
Porównanie: pętla vs comprehension
Wydajność
import time
# Pętla tradycyjna
start = time.time()
lista1 = []
for i in range(1000000):
lista1.append(i * i)
czas1 = time.time() - start
# List comprehension
start = time.time()
lista2 = [i * i for i in range(1000000)]
czas2 = time.time() - start
print(f"Pętla: {czas1:.4f}s")
print(f"Comprehension: {czas2:.4f}s")
# Comprehension jest zazwyczaj szybsze!
Zadania do samodzielnego wykonania:
Podstawy pętli for z range()
- Wyświetl liczby od 0 do 20 używając pętli for i funkcji range().
- Wyświetl liczby od 10 do 20 (włącznie) używając pętli for.
- Wyświetl liczby parzyste od 0 do 20 używając pętli for z odpowiednim krokiem w range().
- Wyświetl liczby od 20 do 1 (odliczanie w dół) używając pętli for.
- Wyświetl co trzecią liczbę z zakresu od 0 do 30 (0, 3, 6, 9…).
- Oblicz sumę liczb od 1 do 100 używając pętli for.
- Oblicz iloczyn liczb od 1 do 10 używając pętli for.
- Wyświetl tabliczkę mnożenia dla liczby 7 (od 7×1 do 7×10).
- Policz ile jest liczb podzielnych przez 3 w zakresie od 1 do 50.
- Wyświetl wszystkie liczby nieparzyste od 1 do 30 w jednej linii, oddzielone przecinkami.
Pętla for z listami
- Stwórz listę 5 swoich ulubionych filmów. Użyj pętli for aby wyświetlić każdy film z numerem (1. Film1, 2. Film2 itd.).
- Stwórz listę liczb [2, 4, 6, 8, 10]. Wyświetl każdą liczbę pomnożoną przez 3.
- Pobierz od użytkownika 5 imion (w pętli) i zapisz je do listy. Następnie wyświetl wszystkie imiona.
- Stwórz listę liczb [10, 20, 30, 40, 50]. Oblicz średnią arytmetyczną tych liczb używając pętli.
- Stwórz listę miast [„Warszawa”, „Kraków”, „Gdańsk”]. Wyświetl tylko te miasta, które mają więcej niż 6 liter.
- Mając listę [1, 2, 3, 4, 5], stwórz nową listę zawierającą kwadraty tych liczb (używając zwykłej pętli, nie comprehension).
- Stwórz listę temperatur w ciągu tygodnia. Policz ile dni temperatura była powyżej 20 stopni.
- Mając listę zakupów [„mleko”, „chleb”, „masło”, „jajka”], wyświetl każdy produkt z ceną (ceny wymyśl sam).
- Stwórz dwie listy z imionami. Sprawdź które imiona występują w obu listach.
- Stwórz listę liczb. Znajdź największą i najmniejszą liczbę używając pętli (bez funkcji max/min).
Pętla for ze stringami
- Pobierz od użytkownika zdanie. Policz ile jest w nim liter 'a’ (małych i wielkich).
- Pobierz słowo od użytkownika. Wyświetl każdą literę w osobnej linii wraz z jej numerem pozycji.
- Stwórz zmienną z tekstem „Python”. Wyświetl ten tekst pionowo (każda litera w nowej linii).
- Pobierz zdanie od użytkownika. Policz ile jest w nim samogłosek (a, e, i, o, u, y).
- Pobierz słowo od użytkownika. Sprawdź czy jest palindromem (czytane od przodu i tyłu tak samo, np. „kajak”).
- Stwórz hasło z podanego tekstu biorąc co drugą literę.
- Pobierz zdanie. Zamień wszystkie spacje na podkreślniki używając pętli.
- Pobierz tekst. Policz ile jest w nim cyfr.
- Pobierz imię i nazwisko. Stwórz inicjały (np. Jan Kowalski → J.K.).
- Pobierz zdanie. Wyświetl je od tyłu (ostatnia litera jako pierwsza).
Pętla for ze słownikami
- Stwórz słownik z 3 produktami i ich cenami. Wyświetl każdy produkt z ceną w formacie „Produkt: X zł”.
- Stwórz słownik z ocenami z przedmiotów (np. {„matematyka”: 5, „polski”: 4}). Oblicz średnią ocen.
- Mając słownik użytkowników ze statusami, wyświetl tylko tych użytkowników którzy mają status „active”.
- Stwórz słownik produktów z cenami. Podnieś każdą cenę o 10% i wyświetl nowy słownik.
- Stwórz słownik z imionami i wiekami. Wyświetl imiona osób pełnoletnich (wiek >= 18).
- Mając słownik angielsko-polski, pozwól użytkownikowi wpisać słowo angielskie i wyświetl tłumaczenie.
- Stwórz słownik miast z liczbą mieszkańców. Znajdź miasto z największą liczbą mieszkańców.
- Stwórz słownik z nazwami plików i ich rozszerzeniami. Policz ile jest plików każdego typu.
- Stwórz dwa słowniki i znajdź wspólne klucze.
- Stwórz słownik punktów graczy. Wyświetl ranking od najwyższego do najniższego wyniku.
Zagnieżdżone pętle for
- Wyświetl tabliczkę mnożenia od 1 do 10 (dla każdej liczby od 1 do 10).
- Narysuj kwadrat 5×5 z gwiazdek używając zagnieżdżonych pętli.
- Narysuj prostokąt o wymiarach podanych przez użytkownika (szerokość × wysokość) z symbolu „#”.
- Stwórz choinkę z gwiazdek o wysokości podanej przez użytkownika.
- Wyświetl wszystkie pary liczb (x, y) gdzie x jest z zakresu 1-3, a y z zakresu 1-3.
- Stwórz listę list (macierz 3×3) wypełnioną zerami.
- Pobierz dwie listy liczb. Stwórz wszystkie możliwe pary (jedna liczba z pierwszej listy, jedna z drugiej).
- Narysuj diament z gwiazdek (górna i dolna część piramidy).
- Stwórz szachownicę 8×8 używając symboli „■” i „□” na przemian.
- Wyświetl trójkąt Pascala do 5 poziomu.
Podstawy pętli while
- Napisz pętlę while, która wyświetla liczby od 1 do 10.
- Napisz pętlę while, która dodaje liczby od 1 do 100 i wyświetla sumę.
- Pobieraj liczby od użytkownika dopóki nie wpisze 0. Potem wyświetl sumę wszystkich liczb.
- Napisz program, który pyta użytkownika o hasło dopóki nie wpisze poprawnego (hasło ustal sam).
- Stwórz licznik odliczający od 10 do 0 z napisem „Start!” na końcu.
- Pobieraj od użytkownika liczby dopóki ich suma nie przekroczy 100. Wyświetl ile liczb wprowadzono.
- Napisz program zgadywania liczby (komputer losuje, użytkownik zgaduje), który działa dopóki użytkownik nie zgadnie.
- Pobieraj liczby od użytkownika i dodawaj do listy. Zatrzymaj gdy użytkownik wpisze „koniec”.
- Napisz pętlę która dzieli liczbę przez 2 dopóki wynik jest większy od 1. Policz ile było operacji.
- Symuluj rzut monetą (losowo 0 lub 1) dopóki nie wypadnie 5 razy „orzeł” pod rząd. Policz ile było rzutów.
Instrukcja break
- Wyświetl liczby od 1 do 100, ale przerwij pętlę gdy dojdziesz do pierwszej liczby podzielnej przez 7.
- Pobieraj liczby od użytkownika. Jeśli wpisze liczbę ujemną, przerwij pętlę i wyświetl sumę dotychczasowych liczb.
- Przeszukaj listę [10, 23, 5, 67, 89, 3] i znajdź pierwszą liczbę większą od 50. Użyj break.
- Napisz program który pyta o login i hasło maksymalnie 3 razy. Po poprawnym logowaniu użyj break.
- W liście liczb znajdź pierwszą liczbę parzystą i wyświetl ją. Użyj break aby nie sprawdzać reszty listy.
Instrukcja continue
- Wyświetl liczby od 1 do 20, ale pomiń liczby podzielne przez 3.
- Mając listę [„Python”, „”, „Java”, None, „C++”], wyświetl tylko niepuste elementy (pomiń „” i None).
- Wyświetl liczby od 1 do 50, ale pomiń liczby z zakresu 20-30.
- Mając listę ocen [5, 3, 4, 2, 5, 1], wyświetl tylko oceny pozytywne (3-6), pomijając niedostateczne.
- W liście produktów ze słownika pomiń produkty o cenie 0 zł (niedostępne).
List Comprehension
- Stwórz listę liczb od 1 do 20 używając list comprehension.
- Stwórz listę kwadratów liczb od 1 do 10 używając list comprehension.
- Z listy [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] wybierz tylko liczby nieparzyste używając list comprehension.
- Mając listę słów [„python”, „java”, „c++”], stwórz nową listę z tymi samymi słowami wielkimi literami.
- Z listy liczb [-5, 3, -1, 7, -2, 8] wybierz tylko liczby dodatnie używając list comprehension.
- Stwórz listę zawierającą długości słów z listy [„kot”, „pies”, „chomik”, „papuga”].
- Z listy [1, 2, 3, 4, 5] stwórz listę [„nieparzysta”, „parzysta”, „nieparzysta”, …] używając list comprehension z if-else.
- Mając dwie listy [1, 2, 3] i [10, 20, 30], stwórz listę sum par o tych samych indeksach: [11, 22, 33].
- Z tekstu „Python Programming” stwórz listę samogłosek które w nim występują.
- Stwórz listę krotek (liczba, kwadrat) dla liczb od 1 do 10 używając list comprehension.
Dict Comprehension
- Stwórz słownik {1: 1, 2: 4, 3: 9, …} dla liczb od 1 do 10 używając dict comprehension.
- Mając listę [„a”, „b”, „c”], stwórz słownik {„a”: 0, „b”: 1, „c”: 2} (litera: indeks).
- Z listy słów stwórz słownik {słowo: długość_słowa} używając dict comprehension.
- Mając słownik {„a”: 1, „b”: 2, „c”: 3}, stwórz nowy gdzie wartości są podwojone.
- Stwórz słownik kwadratów tylko dla liczb parzystych z zakresu 1-20.
- Odwróć słownik {„Jan”: 25, „Anna”: 30, „Piotr”: 28} (wartość staje się kluczem).
- Z dwóch list (kluczy i wartości) stwórz słownik używając dict comprehension.
- Stwórz słownik {liczba: „parzysta”/”nieparzysta”} dla liczb 1-10.
- Mając słownik produktów z cenami, stwórz nowy tylko z produktami droższymi niż 50 zł.
- Ze słownika punktów graczy wybierz tylko tych którzy mają więcej niż 100 punktów.
Zadania matematyczne
- Oblicz sumę wszystkich liczb podzielnych przez 3 lub 5 w zakresie 1-1000.
- Znajdź wszystkie liczby doskonałe w zakresie 1-10000 (liczba doskonała równa się sumie swoich dzielników).
- Napisz program obliczający n-ty wyraz ciągu arytmetycznego (a₁, różnica, n podane przez użytkownika).
- Oblicz sumę cyfr liczby podanej przez użytkownika (np. dla 123 suma to 6).
- Znajdź wszystkie liczby pierwsze w zakresie 1-100 używając pętli.
- Napisz program sprawdzający czy liczba jest liczbą Armstronga (np. 153 = 1³ + 5³ + 3³).
- Oblicz NWW (najmniejszą wspólną wielokrotność) dwóch liczb.
- Wygeneruj ciąg Collatza dla liczby podanej przez użytkownika (jeśli parzysta: n/2, jeśli nieparzysta: 3n+1).
- Znajdź cyfry które powtarzają się w dwóch różnych liczbach.
- Oblicz sumę iloczynów cyfr na pozycjach parzystych i nieparzystych w liczbie.
Zadania ze stringami
- Pobierz zdanie. Policz ile jest słów (rozdzielonych spacjami).
- Pobierz tekst. Zamień pierwszą literę każdego słowa na wielką.
- Pobierz zdanie. Wyświetl najdłuższe słowo.
- Sprawdź czy podany tekst zawiera tylko litery i cyfry (bez znaków specjalnych).
- Pobierz dwa słowa. Sprawdź czy są anagramami (te same litery w innej kolejności).
- Usuń wszystkie samogłoski z podanego tekstu.
- Sprawdź czy podane zdanie jest pangramem (zawiera wszystkie litery alfabetu).
- Zaszyfruj tekst szyfrem Cezara (przesunięcie każdej litery o n pozycji).
- Policz wystąpienia każdego słowa w tekście i wyświetl jako słownik.
- Znajdź wszystkie słowa w tekście które zaczynają się i kończą tą samą literą.
Zadania z walidacją danych
- Pobieraj liczby od użytkownika dopóki nie poda liczby z zakresu 1-10.
- Pobierz od użytkownika email. Sprawdzaj dopóki nie będzie zawierał @ i kropki.
- Pobierz hasło które ma minimum 8 znaków, wielką literę, małą literę i cyfrę. Powtarzaj dopóki nie będzie poprawne.
- Pobierz numer telefonu (9 cyfr). Waliduj i powtarzaj dopóki nie będzie poprawny.
- Pobierz datę urodzenia. Oblicz wiek i sprawdź czy osoba jest pełnoletnia. Powtarzaj do poprawnego formatu.
Zadania algorytmiczne
- Posortuj listę liczb używając algorytmu bąbelkowego (bubble sort).
- Znajdź drugi największy element w liście bez sortowania.
- Zaimplementuj algorytm Euklidesa do znajdowania NWD.
- Sprawdź czy nawiasy w wyrażeniu są zbalansowane (np. „((()))” – OK, „(()” – błąd).
Zadania kompleksowe
- Stwórz prosty system quizu: 5 pytań, każde w pętli, na końcu wynik i ocena.
- Napisz grę „Kółko i krzyżyk” dla dwóch graczy (plansza 3×3, pętle do rozgrywki).
- Stwórz symulator bankomatu: menu w pętli, operacje (wpłata, wypłata, saldo), wyjście przez break.
- Napisz generator haseł: długość i rodzaj znaków wybiera użytkownik, generuj w pętli.
- Stwórz książkę adresową: menu z opcjami (dodaj, usuń, szukaj, wyświetl wszystkie), pętla główna.
- Napisz kalkulator macierzy: dodawanie, odejmowanie macierzy 3×3.
- Stwórz system zarządzania studentami: dodawaj studentów ze stopniami, obliczaj średnie, wyświetlaj ranking.
- Napisz symulator sklepu: produkty ze słownika, koszyk, obliczanie sumy, pętla zakupów.
- Stwórz generator faktur: pobieraj produkty i ilości w pętli, generuj fakturę z sumą i VAT.
- Napisz prostą grę RPG: walka w turach, punkty życia, pętla walki, system doświadczenia.
PODSUMOWANIE
- Pętla
forprzechodzi po kolekcji (lista, krotka, string, słownik,range()). Stosujemy ją, gdy wiemy, ile razy lub po czym iterujemy. - Pętla
whiledziała, dopóki warunek jest prawdziwy. Stosujemy ją, gdy nie wiemy z góry, ile będzie powtórzeń. range(stop),range(start, stop)irange(start, stop, step)nigdy nie zawierają wartościstop. Ujemny krok daje odliczanie w dół.- W pętli
whiletrzeba zmieniać zmienną występującą w warunku (np.i += 1). Bez tego pętla jest nieskończona. Zatrzymanie skryptu:Ctrl+C. - Iteracja po słowniku:
for k in slownikdaje same klucze,.values()daje wartości,.items()daje pary klucz–wartość.
breakkończy pętlę natychmiast, acontinueprzechodzi do następnego obiegu.- Blok
elseprzy pętli wykonuje się tylko wtedy, gdy pętla nie została przerwana przezbreak. - Pętle zagnieżdżone: pętla wewnętrzna wykonuje się w całości dla każdego obiegu zewnętrznej. Liczba powtórzeń to iloczyn (
3 × 4 = 12). - Typowe wzorce algorytmiczne w lekcji:
- licznik (
licznik += 1), - suma (
suma += x), - iloczyn (
silnia *= i), - szukanie z
break, - filtrowanie z
continue.
- licznik (
- List i dict comprehension to skrócony zapis pętli budującej listę lub słownik. Zapis
[wyrażenie for x in kolekcja if warunek]robi to samo, co pętlaforzappend. - Typowe błędy: brak dwukropka, brak wcięcia, brak zmiany zmiennej w
while, pomylenierange(10)z zakresem 1–10, zmienna zainicjowana wewnątrz pętli zamiast przed nią (suma = 0w środku zeruje wynik w każdym obiegu).
Minimum, które powinno wejść w pamięć
Jeżeli masz zapamiętać tylko kilka rzeczy z tej lekcji, zapamiętaj te:
for x in kolekcja:– iteracja po elementach.while warunek:– powtarzanie, dopóki warunek jest prawdziwy.range(stop)kończy się nastop - 1.range(start, stop, step)– krok może być ujemny.- W
whilezawsze zmieniaj zmienną z warunku, inaczej pętla będzie nieskończona (Ctrl+Cją zatrzyma). - Słownik w
for: samfor k in ddaje klucze. Do par służy.items(). break– wyjście z pętli.continue– następny obieg.elseprzy pętli wykona się, gdy nie byłobreak.- Zmienne pomocnicze (
suma,licznik,silnia) ustawiaj przed pętlą. - Wcięcie decyduje, co należy do pętli. Kod bez wcięcia po pętli wykona się raz, po jej zakończeniu.
[x for x in kolekcja if warunek]to krótszy zapis pętli budującej listę.
Ściągawka – najważniejsze polecenia i składnia
Pętla for i range()
for x in kolekcja: # lista, krotka, string, słownik
...
range(5) # 0, 1, 2, 3, 4
range(2, 6) # 2, 3, 4, 5
range(0, 10, 2) # 0, 2, 4, 6, 8
range(10, 0, -1) # 10, 9, ..., 1
Indeks i element
for i, x in enumerate(lista): # i = indeks, x = element
...
for i in range(len(lista)): # lista[i] = element
...
Słownik
for k in d: ... # klucze
for v in d.values(): ... # wartości
for k, v in d.items(): ... # klucz i wartość
Pętla while
while warunek:
...
# zmień zmienną z warunku!
while True: # pętla "bez końca" kończona przez break
...
if warunek_wyjscia:
break
Sterowanie pętlą
| Instrukcja | Działanie |
|---|---|
break | natychmiast kończy pętlę |
continue | przechodzi do następnego obiegu |
else przy pętli | wykonuje się, gdy pętla zakończyła się bez break |
Wzorce algorytmiczne
suma = 0 # suma
for x in lista:
suma += x
licznik = 0 # zliczanie
for x in lista:
if warunek:
licznik += 1
for x in lista: # szukanie
if x == szukana:
print("Jest")
break
else:
print("Brak")
Zagnieżdżanie i wyświetlanie
for i in range(3):
for j in range(3):
print(i * j, end=" ") # end=" " – bez nowej linii
print() # nowa linia po wierszu
Comprehension
[x * x for x in range(5)] # lista
[x for x in lista if x > 0] # z filtrem
{x: x * x for x in range(5)} # słownik
{x * x for x in range(-5, 6)} # zestaw (set)
Quiz – sprawdź się
Pytanie 1. Co zostanie wyświetlone?
for i in range(2, 10, 3):
print(i, end=" ")
Pytanie 2. Uzupełnij kod tak, aby wyświetlił liczby od 10 do 1 (odliczanie w dół).
for i in range(___):
print(i, end=" ")
Pytanie 3. Co zostanie wyświetlone?
suma = 0
for i in range(1, 5):
suma += i
print(suma)
Pytanie 4. Dlaczego ten program nigdy się nie zakończy? Jak go naprawić i jak zatrzymać go w terminalu?
i = 0
while i < 5:
print(i)
Pytanie 5. Co zostanie wyświetlone?
for i in range(1, 8):
if i == 3:
continue
if i == 6:
break
print(i, end=" ")
Pytanie 6. Co zostanie wyświetlone? Jak zmienić pętlę, aby wypisywała oceny zamiast przedmiotów?
oceny = {"mat": 5, "pol": 3}
for x in oceny:
print(x)
Pytanie 7. Co zostanie wyświetlone?
for x in [1, 2, 3]:
if x == 5:
break
else:
print("Brak")
Pytanie 8. Ile razy wykona się instrukcja print w poniższym kodzie?
for i in range(2):
for j in range(3):
print(i, j)
Pytanie 9. Co zostanie wyświetlone?
print([x * 2 for x in range(5) if x > 2])
Pytanie 10. Zadanie praktyczne: napisz program, który w pętli pobiera od użytkownika liczby całkowite do momentu wpisania 0, a następnie wyświetla ich sumę (bez wliczania zera).
Odpowiedzi
2 5 8– start 2, krok 3, wartość 11 byłaby już poza zakresem (stop= 10 nie jest włączone).range(10, 0, -1)–stop= 0 nie jest włączone, więc ostatnia wartość to 1.10– suma 1 + 2 + 3 + 4.range(1, 5)kończy się na 4.- W pętli nie zmienia się zmienna
i, więc waruneki < 5jest zawsze prawdziwy. Naprawa: dodaći += 1w bloku pętli. Zatrzymanie:Ctrl+C. 1 2 4 5– dlai = 3działacontinue(pomija wyświetlanie), a dlai = 6działabreak(liczba 7 nie jest już sprawdzana).- Wyświetli
matipolw osobnych liniach, bo domyślnie iterujemy po kluczach. Aby wypisać oceny:for x in oceny.values():. Aby wypisać klucz i ocenę:for k, v in oceny.items():. Brak– pętla nie została przerwana przezbreak, więc wykonuje się blokelse.- 6 razy (2 × 3). Pętla wewnętrzna wykonuje się w całości dla każdego obiegu zewnętrznej.
[6, 8]– warunekx > 2przepuszcza 3 i 4, a wyrażeniex * 2zamienia je na 6 i 8.- Przykładowe rozwiązanie:
suma = 0
while True:
liczba = int(input("Podaj liczbę (0 kończy): "))
if liczba == 0:
break
suma += liczba
print(f"Suma: {suma}")
Kryteria poprawności:
suma = 0jest ustawiona przed pętlą,- zero kończy pętlę przez
breaki nie jest dodawane do sumy, - wynik jest wyświetlony po pętli (bez wcięcia).