Pętla pozwala wykonać te same instrukcje wiele razy bez kopiowania kodu. Na tej lekcji uczniowie napiszą trzy krótkie programy dla fikcyjnego koła zainteresowań: plan kolejnych spotkań, sumę liczb parzystych oraz obliczenie, po ilu tygodniach składek koło uzbiera na zakup zestawu.
Scenariusz jest przeznaczony na 45 minut dla uczniów, którzy znają print, zmienne, input i konwersję int — na przykład po pierwszej lekcji Pythona. Warunki if nie są potrzebne do zadań podstawowych; pojawiają się dopiero w zadaniu dla chętnych.
Przygotowanie stanowisk
Na komputerach potrzebny jest Python 3 i edytor, który uruchamia skrypty — może to być IDLE. Rozpakuj pakiet z sekcji materiałów do folderu petle-python. Plik start.py zawiera komentarze z poleceniami i wspólny przykład z lekcji.
Program uruchomisz w IDLE przez Run → Run Module albo w terminalu otwartym w folderze projektu poleceniem python start.py, python3 start.py lub py start.py — zależnie od instalacji. Jeśli program „zawiesi się” w pętli, przerwij go skrótem Ctrl+C (w IDLE: Shell → Interrupt Execution). Pokaż ten skrót klasie na samym początku.
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- zapisać pętlę
forzrangei przewidzieć, jakie wartości przyjmie zmienna sterująca; - zsumować wartości w pętli, używając zmiennej zainicjowanej przed pętlą;
- zapisać pętlę
whilez warunkiem i zmianą stanu, która prowadzi do jej zakończenia; - dobrać rodzaj pętli do zadania: znana liczba powtórzeń albo powtarzanie do spełnienia warunku.
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: jak wypisać 8 spotkań bez 8 instrukcji print? |
| 5–15 min | Pętla for i range — przewidywanie wyników |
| 15–22 min | Sumowanie w pętli i pętla while |
| 22–37 min | Trzy zadania samodzielne |
| 37–42 min | Sprawdzenie danych testowych i omówienie błędów |
| 42–45 min | Pytania kontrolne |
Pętla for i funkcja range
Wpisz do pliku i uruchom:
for numer in range(1, 6):
print("Spotkanie", numer)
Program wypisze pięć wierszy: od Spotkanie 1 do Spotkanie 5. range(1, 6) tworzy kolejne liczby całkowite od 1 włącznie do 6 wyłącznie. W każdym obrocie pętli zmienna numer przyjmuje następną z tych wartości, a potem wykonuje się wcięty blok kodu.
Wcięcie (zwykle cztery spacje) pokazuje, które instrukcje należą do pętli. Dwukropek na końcu wiersza z for jest obowiązkowy. Instrukcja zapisana bez wcięcia wykona się raz, dopiero po zakończeniu pętli.
Zanim uczniowie uruchomią kolejne przykłady, poproś ich o zapisanie przewidywanych liczb:
print(list(range(5)))
print(list(range(2, 11, 2)))
print(list(range(10, 0, -3)))
Wyniki to [0, 1, 2, 3, 4], [2, 4, 6, 8, 10] oraz [10, 7, 4, 1]. Jeden argument oznacza start od zera. Trzeci argument to krok — może być ujemny. Funkcja list służy tu tylko do pokazania wszystkich liczb naraz.
Sumowanie i pętla while
Aby zsumować wartości, tworzymy zmienną przed pętlą i w każdym obrocie dodajemy do niej kolejną wartość:
liczba_spotkan = 4
razem = 0
for numer in range(1, liczba_spotkan + 1):
print("Spotkanie", numer, "- 45 minut")
razem = razem + 45
print("Łącznie:", razem, "minut")
Wynik końcowy to Łącznie: 180 minut. Gdyby razem = 0 znalazło się wewnątrz pętli, suma byłaby zerowana w każdym obrocie i program pokazałby tylko 45. Zapis range(1, liczba_spotkan + 1) pozwala numerować spotkania od 1 do 4.
Pętla while powtarza blok, dopóki warunek jest prawdziwy. Używamy jej, gdy nie znamy z góry liczby powtórzeń:
punkty = 0
runda = 0
while punkty < 20:
runda = runda + 1
punkty = punkty + 6
print("Runda", runda, "- punkty:", punkty)
print("Cel osiągnięty po", runda, "rundach")
Program pokaże cztery rundy: 6, 12, 18 i 24 punkty, a potem komunikat o czterech rundach. Po trzeciej rundzie warunek 18 < 20 jest jeszcze prawdziwy, więc wykonuje się czwarta. Po niej 24 < 20 jest fałszywe i pętla kończy pracę.
Najważniejsza zasada pętli while: coś wewnątrz musi zmieniać wartości występujące w warunku. Usunięcie wiersza punkty = punkty + 6 sprawi, że program będzie wypisywał rundy bez końca.
Trzy zadania z pętlami
Zadanie 1. Plan spotkań. Pobierz od użytkownika liczbę spotkań przez int(input(...)). Pętlą for wypisz każde spotkanie w formacie Spotkanie 1: 45 minut. Po pętli wypisz łączny czas, np. Łącznie: 135 minut dla trzech spotkań. Sprawdź także, co program wypisze dla 0.
Zadanie 2. Liczby parzyste. Wypisz w jednym wierszu liczby parzyste od 2 do 20 i oblicz ich sumę. Użyj range z krokiem 2 — bez sprawdzania podzielności. Oczekiwana suma to 110. Aby wypisać liczby w jednym wierszu, użyj print(liczba, end=" ").
Zadanie 3. Składka na zestaw. Koło zbiera na zestaw do robotyki za 250 zł. Co tydzień uczestnicy wpłacają razem 35 zł, a na początku w kasie jest 0 zł. Pętlą while wypisz po każdym tygodniu jego numer i stan kasy, a na końcu zdanie: Zestaw można kupić po 8 tygodniach. Liczby 250 i 35 zapisz w zmiennych, aby łatwo było je zmienić.
Dla chętnych: program wczytuje punkty kolejnych uczestników quizu, dopóki użytkownik nie wpisze 0. Na koniec wypisuje liczbę uczestników i sumę punktów. Wpisanie od razu 0 ma dać 0 uczestników. W tym zadaniu przyda się while oraz warunek if albo odpowiedni układ instrukcji.
Rozwiązania z danymi testowymi
Pełne rozwiązanie trzech zadań, zapisane w pakiecie jako rozwiazanie.py:
# Zadanie 1
liczba_spotkan = int(input("Ile spotkań? "))
minuty = 45
razem = 0
for numer in range(1, liczba_spotkan + 1):
print("Spotkanie", str(numer) + ":", minuty, "minut")
razem = razem + minuty
print("Łącznie:", razem, "minut")
# Zadanie 2
suma = 0
for liczba in range(2, 21, 2):
print(liczba, end=" ")
suma = suma + liczba
print()
print("Suma:", suma)
# Zadanie 3
cena = 250
wplata = 35
kasa = 0
tydzien = 0
while kasa < cena:
tydzien = tydzien + 1
kasa = kasa + wplata
print("Tydzień", tydzien, "- w kasie:", kasa, "zł")
print("Zestaw można kupić po", tydzien, "tygodniach.")
| Dane | Oczekiwany wynik |
|---|---|
| Zadanie 1: 3 spotkania | 3 wiersze, Łącznie: 135 minut |
| Zadanie 1: 1 spotkanie | 1 wiersz, Łącznie: 45 minut |
| Zadanie 1: 0 spotkań | brak wierszy spotkań, Łącznie: 0 minut |
| Zadanie 2 | 2 4 6 8 10 12 14 16 18 20, Suma: 110 |
| Zadanie 3: cena 250, wpłata 35 | 8 tygodni, w kasie 280 zł |
| Zadanie 3: cena 70, wpłata 35 | 2 tygodnie, w kasie 70 zł |
| Zadanie 3: cena 0 | pętla nie wykona się ani razu, 0 tygodni |
Komentarz do pułapek:
- W zadaniu 1 przy wartości
0zakresrange(1, 1)jest pusty. Pętla nie wykonuje się, a program nadal poprawnie wypisuje sumę 0. To dobry przypadek brzegowy do sprawdzenia. - W zadaniu 2 górna granica to
21, a nie20. Przyrange(2, 20, 2)zabraknie liczby 20, a suma wyniesie 90. - W zadaniu 3 po siedmiu tygodniach w kasie jest 245 zł, czyli nadal mniej niż 250 zł. Dlatego potrzebny jest ósmy tydzień. Gdy cena dzieli się bez reszty przez wpłatę (70 i 35), warunek
kasa < cenakończy pętlę dokładnie po dwóch tygodniach. Warunekkasa <= cenadałby o jeden tydzień za dużo. - Pusta instrukcja
print()w zadaniu 2 kończy wiersz po wypisaniu liczb zend=" ".
Rozwiązanie zadania dla chętnych jest w pliku rozszerzenie.py. Zakłada, że użytkownik wpisuje liczby całkowite; obsługa błędnych danych to temat osobnej lekcji o wyjątkach.
Typowe błędy w pętlach
| Objaw | Co sprawdzić |
|---|---|
| Program nie kończy działania | W pętli while brakuje zmiany zmiennej z warunku. Przerwij Ctrl+C i dopisz ją. |
| Brakuje ostatniej liczby | Druga granica range nie jest wliczana; zwiększ ją o 1. |
| Suma jest za mała lub równa jednej wartości | Zmienna sumy jest zerowana wewnątrz pętli zamiast przed nią. |
| Wynik końcowy wypisuje się wiele razy | Instrukcja print po pętli ma wcięcie i należy do bloku pętli. |
| IndentationError | Wiersze bloku mają różne wcięcia lub mieszają spacje z tabulatorami. |
| TypeError przy range | Liczba z input nie została zamieniona przez int. |
Pytania kontrolne i punktacja
- Jakie liczby wygeneruje
range(3, 9, 3)? - Kiedy lepiej użyć
whileniżfor? - Co się stanie, jeśli zmienną sumy ustawisz na 0 wewnątrz pętli?
Odpowiedzi: 3 i 6 — liczba 9 nie jest wliczana. Pętlę while stosujemy, gdy powtarzamy działanie do spełnienia warunku i nie znamy z góry liczby powtórzeń, jak w zadaniu ze składką. Suma zostanie wyzerowana w każdym obrocie, więc po pętli będzie zawierała tylko ostatnią dodaną wartość.
Proponowana punktacja (razem 10 punktów): zadanie 1 — pętla for z poprawnym zakresem 2 pkt, suma 1 pkt; zadanie 2 — range z krokiem 1 pkt, poprawna suma 110 1 pkt; zadanie 3 — warunek while 2 pkt, zmiana stanu i liczba tygodni 1 pkt; sprawdzenie przypadku 0 spotkań i drugiej ceny — 2 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
- Pakiet Python: plik startowy, rozwiązanie, rozszerzenie i karta pracy
- Karta pracy ucznia — otwórz i wydrukuj
Rozpakuj ZIP przed otwarciem skryptów. start.py zawiera przykłady z lekcji i polecenia w komentarzach, rozwiazanie.py — trzy zadania podstawowe, a rozszerzenie.py — zadanie dla chętnych. Materiały są dostępne bez logowania; publiczny klucz służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej po pętlach?
Następny krok to łączenie pętli z warunkami if, break i listami — na przykład szukanie największej wartości albo zliczanie odpowiedzi. Ten materiał rozwija dział o instrukcjach warunkowych i pętlach w kursie Python w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: instrukcje for, while i range w oficjalnym tutorialu Pythona oraz opis funkcji range w dokumentacji. Jeśli prowadzisz również zajęcia z tworzenia stron, zobacz lekcję o formularzach HTML.
Poprowadź kolejne lekcje Python
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu Python →