Python · pętle

Pętle for i while w Pythonie — ćwiczenia z odpowiedziami

for, range i while na trzech krótkich programach. Rozwiązania, dane testowe i przypadki brzegowe do sprawdzenia.

45 minutPoziom podstawowyPliki i rozwiązania

Materiał redakcyjny TablicaPro · liceum i technikum

kasa = 0
tydzien = 0
while kasa < 250:
    tydzien += 1
    kasa += 35
print(tydzien, "tygodni")
› 8 tygodni
Pętla kończy się, gdy warunek przestaje być prawdziwy.

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ę for z range i 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ę while z 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.
CzasPraca na lekcji
0–5 minProblem: jak wypisać 8 spotkań bez 8 instrukcji print?
5–15 minPętla for i range — przewidywanie wyników
15–22 minSumowanie w pętli i pętla while
22–37 minTrzy zadania samodzielne
37–42 minSprawdzenie danych testowych i omówienie błędów
42–45 minPytania 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.")
DaneOczekiwany wynik
Zadanie 1: 3 spotkania3 wiersze, Łącznie: 135 minut
Zadanie 1: 1 spotkanie1 wiersz, Łącznie: 45 minut
Zadanie 1: 0 spotkańbrak wierszy spotkań, Łącznie: 0 minut
Zadanie 22 4 6 8 10 12 14 16 18 20, Suma: 110
Zadanie 3: cena 250, wpłata 358 tygodni, w kasie 280 zł
Zadanie 3: cena 70, wpłata 352 tygodnie, w kasie 70 zł
Zadanie 3: cena 0pętla nie wykona się ani razu, 0 tygodni

Komentarz do pułapek:

  • W zadaniu 1 przy wartości 0 zakres range(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 nie 20. Przy range(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 < cena kończy pętlę dokładnie po dwóch tygodniach. Warunek kasa <= cena dałby o jeden tydzień za dużo.
  • Pusta instrukcja print() w zadaniu 2 kończy wiersz po wypisaniu liczb z end=" ".

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

ObjawCo sprawdzić
Program nie kończy działaniaW pętli while brakuje zmiany zmiennej z warunku. Przerwij Ctrl+C i dopisz ją.
Brakuje ostatniej liczbyDruga granica range nie jest wliczana; zwiększ ją o 1.
Suma jest za mała lub równa jednej wartościZmienna sumy jest zerowana wewnątrz pętli zamiast przed nią.
Wynik końcowy wypisuje się wiele razyInstrukcja print po pętli ma wcięcie i należy do bloku pętli.
IndentationErrorWiersze bloku mają różne wcięcia lub mieszają spacje z tabulatorami.
TypeError przy rangeLiczba z input nie została zamieniona przez int.

Pytania kontrolne i punktacja

  1. Jakie liczby wygeneruje range(3, 9, 3)?
  2. Kiedy lepiej użyć while niż for?
  3. 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

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 →

Zobacz program kursu