łatwyProgramowaniePython

Pętle For i While w Python - Matura z Informatyki

10 min czytania
Python
Zaktualizowano: 2.11.2025

Pętle to fundamentalna konstrukcja programistyczna, która pozwala wielokrotnie wykonywać ten sam fragment kodu. W Pythonie mamy dwa główne typy pętli: for (do iteracji po sekwencjach) i while (do powtarzania dopóki warunek jest prawdziwy). Zrozumienie kiedy i jak ich używać to absolutna podstawa programowania.

Dlaczego to ważne? Na maturze z informatyki pętle pojawiają się w niemal każdym zadaniu programistycznym. Musisz umieć przetwarzać dane z plików (pętla po liniach), analizować liczby (pętla po cyfrach), implementować algorytmy (pętle w algorytmach). Bez opanowania pętli nie rozwiążesz nawet najprostszych zadań.

Teoria

Pętla FOR używana jest, gdy znamy liczbę iteracji lub iterujemy po kolekcji (lista, string, plik). Pętla WHILE używana jest, gdy powtarzamy coś dopóki spełniony jest warunek, ale nie znamy z góry ile razy. Ogólna zasada: jeśli możesz użyć FOR - użyj FOR. WHILE zostawiamy na sytuacje, gdzie warunek stopu jest dynamiczny.

Jak to działa?

  1. Pętla FOR: Python automatycznie pobiera kolejne elementy z sekwencji i przypisuje do zmiennej
  2. Funkcja range(n) generuje liczby od 0 do n-1
  3. range(a, b) generuje liczby od a do b-1
  4. range(a, b, krok) pozwala kontrolować krok iteracji
  5. Pętla WHILE: sprawdza warunek przed każdą iteracją, jeśli True - wykonuje blok kodu
  6. Instrukcje break (wyjście z pętli) i continue (pomiń resztę iteracji) działają w obu typach

Złożoność: Złożoność czasowa pętli zależy od liczby iteracji. Pętla wykonująca się n razy ma złożoność O(n). Zagnieżdżone pętle (pętla w pętli) to O(n²), O(n³) itd.

Implementacja

Pętla FOR z range() - podstawy

Python
# Wypisz liczby od 0 do 4
for i in range(5):
    print(i)
# Wynik: 0, 1, 2, 3, 4

# Wypisz liczby od 10 do 14
for i in range(10, 15):
    print(i)
# Wynik: 10, 11, 12, 13, 14

# Wypisz parzyste liczby od 0 do 10
for i in range(0, 11, 2):
    print(i)
# Wynik: 0, 2, 4, 6, 8, 10

range(n) to najczęściej używana forma pętli FOR. Generuje liczby od 0 do n-1. range(a, b) od a do b-1. range(a, b, krok) pozwala kontrolować 'skok' między liczbami.

Pętla FOR po liście i stringu

Python
# Iteracja po liście
liczby = [10, 20, 30, 40]
for liczba in liczby:
    print(liczba * 2)
# Wynik: 20, 40, 60, 80

# Iteracja po stringu (ciągu znaków)
slowo = "Python"
for litera in slowo:
    print(litera)
# Wynik: P, y, t, h, o, n (każda w osobnej linii)

# Iteracja z indeksem - enumerate()
for indeks, wartosc in enumerate(["a", "b", "c"]):
    print(f"{indeks}: {wartosc}")
# Wynik: 0: a, 1: b, 2: c

FOR świetnie nadaje się do iteracji po gotowych kolekcjach. Python automatycznie pobiera kolejne elementy. enumerate() przydaje się gdy potrzebujemy zarówno indeksu jak i wartości.

Pętla FOR - wczytywanie pliku

Python
# Wczytywanie linii z pliku - BARDZO CZĘSTE NA MATURZE
with open('dane.txt', 'r') as plik:
    for linia in plik:
        linia = linia.strip()  # usuń \n na końcu
        print(linia)

# Wczytanie wszystkich liczb z pliku
with open('liczby.txt', 'r') as plik:
    for linia in plik:
        liczba = int(linia.strip())
        # przetwarzaj liczbę...
        print(liczba * 2)

To najczęstszy wzorzec na maturze! Pętla FOR automatycznie iteruje po liniach pliku. strip() usuwa znaki białe (spacje, \n) z początku i końca.

Pętla WHILE - podstawy

Python
# Wypisz liczby od 0 do 4 używając while
i = 0
while i < 5:
    print(i)
    i += 1  # WAŻNE: zwiększ licznik!
# Wynik: 0, 1, 2, 3, 4

# Sumowanie liczb dopóki suma < 100
suma = 0
liczba = 1
while suma < 100:
    suma += liczba
    liczba += 1
print(f"Suma: {suma}, Liczb: {liczba}")

WHILE powtarza się dopóki warunek jest True. KRYTYCZNE: musisz pamiętać o zmianie zmiennej w warunku (tutaj: i += 1), inaczej pętla będzie nieskończona!

Pętla WHILE - przykład praktyczny

Python
# Obliczanie cyfr liczby
liczba = 12345
ile_cyfr = 0
temp = liczba

while temp > 0:
    temp = temp // 10  # dzielenie całkowite
    ile_cyfr += 1

print(f"Liczba {liczba} ma {ile_cyfr} cyfr")
# Wynik: Liczba 12345 ma 5 cyfr

# Znajdowanie NWD (algorytm Euklidesa)
a, b = 48, 18
while b != 0:
    a, b = b, a % b
print(f"NWD = {a}")  # Wynik: 6

WHILE jest idealny gdy nie wiemy z góry ile iteracji będzie potrzebnych. Tutaj: nie wiemy ile cyfr ma liczba, dopóki jej nie 'obetniemy'.

Break i Continue

Python
# BREAK - wyjście z pętli
for i in range(10):
    if i == 5:
        break  # kończy pętlę
    print(i)
# Wynik: 0, 1, 2, 3, 4 (zatrzymuje się na 5)

# CONTINUE - pomiń resztę iteracji
for i in range(10):
    if i % 2 == 0:  # jeśli parzysta
        continue  # pomiń, przejdź do następnej
    print(i)
# Wynik: 1, 3, 5, 7, 9 (tylko nieparzyste)

# Szukanie liczby w pliku
with open('dane.txt') as f:
    for linia in f:
        liczba = int(linia)
        if liczba == 100:
            print("Znaleziono!")
            break

break kończy całą pętlę natychmiast. continue pomija resztę obecnej iteracji i przechodzi do następnej. Oba działają zarówno w FOR jak i WHILE.

Przykładowe Zadania Maturalne

Matura 2026Zadanie Zadanie Typu Maturalnego 1

W pliku 'liczby.txt' znajduje się 1000 liczb naturalnych (każda w osobnej linii). Napisz program, który obliczy i wypisze, ile z tych liczb jest parzystych.

Wskazówka: Użyj pętli FOR do iteracji po liniach pliku. W każdej iteracji wczytaj liczbę (pamiętaj o konwersji na 'int' i 'strip()'). Użyj operatora modulo (%) do sprawdzenia parzystości (liczba % 2 == 0).

Pokaż szkic rozwiązania
1. Otwórz plik 'liczby.txt' do odczytu.
2. Zainicjuj zmienną 'licznik_parzystych = 0'.
3. Rozpocznij pętlę FOR 'for linia in plik:'.
4. W pętli:
   a. Wczytaj liczbę: 'liczba = int(linia.strip())'.
   b. Sprawdź warunek: 'if liczba % 2 == 0:'.
   c. Jeśli warunek jest prawdziwy, zwiększ licznik: 'licznik_parzystych += 1'.
5. Po zakończeniu pętli, wypisz 'licznik_parzystych'.
Matura 2024Zadanie 4.1 (Matura Próbna Grudzień 2024)

W pliku prostokaty.txt opisano 5000 prostokątów, po jednym w każdym wierszu. Opis każdego prostokąta składa się z dwóch dodatnich liczb całkowitych (wysokość h, szerokość s) oddzielonych spacją. Podaj najmniejsze i największe pole powierzchni dla prostokątów z pliku prostokaty.txt.

Wskazówka: Będziesz potrzebować pętli FOR do wczytania każdej linii z pliku. Zainicjuj zmienne 'min_pole' i 'max_pole' przed pętlą. Dla 'min_pole' użyj bardzo dużej wartości początkowej, a dla 'max_pole' bardzo małej (np. 0). W każdej iteracji oblicz pole = h * s i zaktualizuj min/max.

Pokaż szkic rozwiązania
1. Otwórz plik 'prostokaty.txt'.
2. Zainicjuj 'min_pole = 999999999' (lub pierwsza wartość z pliku).
3. Zainicjuj 'max_pole = 0'.
4. Dla każdej linii w pliku:
   a. Podziel linię na dwie liczby: 'h, s = map(int, linia.split())'.
   b. Oblicz 'pole = h * s'.
   c. Sprawdź: 'if pole < min_pole: min_pole = pole'.
   d. Sprawdź: 'if pole > max_pole: max_pole = pole'.
5. Po pętli wypisz 'min_pole' i 'max_pole'.

Częste Błędy

Nieskończona pętla WHILE

Najczęstszy błąd: zapomnienie o zmianie zmiennej w warunku. Np. while i < 10: print(i) (brak i += 1) spowoduje nieskończoną pętlę.

Poprawka: ZAWSZE sprawdzaj czy wewnątrz pętli WHILE coś zmienia wartość zmiennej w warunku. Jeśli nie - pętla nigdy się nie skończy.

Błąd off-by-one w range()

range(10) generuje 0-9, a nie 0-10! range(a, b) to ZAWSZE od a do b-1. Częsty błąd: chcę 100 liczb, piszę range(100), ale zaczynam od 0.

Poprawka: Pamiętaj: range(n) to n liczb od 0 do n-1. Jeśli chcesz od 1 do n, użyj range(1, n+1).

Modyfikowanie listy podczas iteracji

Nie możesz dodawać/usuwać elementów z listy podczas iteracji po niej: for x in lista: lista.remove(x) - to spowoduje błędy.

Poprawka: Iteruj po kopii listy: for x in lista[:] albo utwórz nową listę z elementami do zachowania.

Zapomnienie o strip() przy wczytywaniu pliku

Każda linia z pliku ma na końcu \n (znak nowej linii). int('123\n') wywoła błąd! Musisz użyć strip().

Poprawka: ZAWSZE używaj linia.strip() przed konwersją na int/float: liczba = int(linia.strip())

Używanie WHILE zamiast FOR

Wielu uczniów nadużywa WHILE, pisząc np. i=0; while i<10: ... zamiast po prostu for i in range(10).

Poprawka: Jeśli znasz liczbę iteracji lub iterujesz po kolekcji - użyj FOR. Jest prostszy i mniej podatny na błędy.

Kluczowe Wnioski

  • FOR używamy gdy znamy liczbę iteracji lub iterujemy po kolekcji (lista, string, plik)
  • WHILE używamy gdy powtarzamy dopóki warunek jest spełniony, ale nie znamy z góry ile razy
  • range(n) generuje liczby 0, 1, 2, ..., n-1 (n liczb, ale od 0!)
  • Przy wczytywaniu pliku: ZAWSZE używaj strip() przed konwersją na int
  • W pętli WHILE: pamiętaj o zmianie zmiennej w warunku, inaczej nieskończona pętla
  • break kończy pętlę natychmiast, continue pomija resztę iteracji
  • Pętla FOR po pliku: for linia in plik: - najczęstszy wzorzec na maturze

Najczęściej Zadawane Pytania

Kiedy używać FOR a kiedy WHILE?

Prosta zasada: jeśli możesz użyć FOR - użyj FOR. FOR jest prostszy i bezpieczniejszy. WHILE zostawiamy na sytuacje gdzie warunek stopu jest dynamiczny, np. 'dopóki liczba > 0', 'dopóki użytkownik nie wpisze quit', 'dopóki b != 0' (algorytm Euklidesa).

Dlaczego range(10) daje 0-9 a nie 1-10?

To konwencja Pythona (i większości języków programowania). range(n) zawsze generuje n liczb zaczynając od 0. Jeśli chcesz od 1 do 10, użyj range(1, 11). Wygląda dziwnie, ale szybko się przyzwyczaisz.

Co to znaczy 'nieskończona pętla' i jak jej uniknąć?

Nieskończona pętla to pętla, która nigdy się nie kończy, bo jej warunek zawsze jest True. Przykład: i=0; while i<10: print(i) - brak i+=1 oznacza, że i zawsze będzie 0, więc warunek zawsze True. Unikaj tego sprawdzając czy wewnątrz WHILE coś zmienia wartość zmiennej w warunku.

Czy mogę użyć break w pętli FOR?

Tak! break działa zarówno w FOR jak i WHILE. Kończy najbliższą pętlę natychmiast. Często używane gdy szukamy czegoś i chcemy przestać jak znajdziemy.

Co się stanie jeśli zapomnę o strip() wczytując plik?

Każda linia ma na końcu \n (znak nowej linii). Bez strip() int('123\n') wywoła błąd ValueError. ZAWSZE używaj linia.strip() przed konwersją na liczbę.

Chcesz opanować wszystkie tematy maturalne?

Dołącz do kursu i zyskaj dostęp do interaktywnych lekcji, edytora kodu i setek zadań.

Powiązane Tematy