Lekcja 4. Pętla while w Pythonie — powtarzanie, dopóki warunek jest spełniony
latwyPo co się tego uczymy?
Gdy NIE WIESZ z góry, ile razy program ma coś powtórzyć (np. "pytaj o hasło, dopóki użytkownik nie poda poprawnego"), pętla while jest jedynym sensownym rozwiązaniem. To fundament programów interaktywnych — walidacji danych, menu, gier — i częsty temat zadań maturalnych.
Teoria
Pętla while powtarza blok kodu TAK DŁUGO, JAK warunek pozostaje prawdziwy (True). Składnia: while warunek:, a pod spodem (wcięty) kod wykonywany wielokrotnie.
Cztery elementy każdej poprawnej pętli while:
- warunek początkowy — musi dać się ocenić jako
True/False; - ciało pętli — instrukcje wykonywane w kółko;
- zmienna sterująca — zwykle licznik albo flaga, od której zależy warunek;
- modyfikacja zmiennej sterującej WEWNĄTRZ pętli — coś musi się zmienić, żeby pętla kiedyś się zakończyła.
Pętla nieskończona — jeśli zapomnisz o punkcie 4 (modyfikacji zmiennej sterującej), warunek nigdy nie stanie się False i program będzie działał w nieskończoność (trzeba go przerwać ręcznie, np. Ctrl+C w terminalu). To NAJCZĘSTSZY błąd początkujących z pętlą while.
break — natychmiastowe przerwanie pętli — instrukcja break KOŃCZY działanie pętli NATYCHMIAST, niezależnie od tego, czy warunek while jest nadal prawdziwy. Przydatne np. przy szukaniu elementu — gdy go znajdziemy, nie ma sensu kontynuować.
continue — pominięcie reszty iteracji — continue od razu przeskakuje do NASTĘPNEGO sprawdzenia warunku, pomijając pozostałe instrukcje w BIEŻĄCEJ iteracji (ale NIE kończy całej pętli, jak break).
Pętla while True: z warunkiem wyjścia w środku — bardzo częsty wzorzec: zamiast skomplikowanego warunku na początku, pętla "zawsze się kręci" (while True:), a wyjście z niej następuje przez break gdzieś w środku, po sprawdzeniu konkretnej sytuacji (np. poprawnego hasła). To wygodne, gdy warunek zależy od czegoś, co dzieje się DOPIERO wewnątrz pętli.
Schemat
while warunek:
(kod wykonywany wielokrotnie)
(coś musi zmienić warunek, inaczej pętla NIESKOŃCZONA!)
PRZYKŁAD - licznik prób logowania:
proby = 0
while proby < 3:
...sprawdź hasło...
jeśli błędne: proby += 1 ← TO zmienia warunek
jeśli poprawne: break ← natychmiastowe wyjście
WZORZEC "while True + break":
while True:
dane = input("Podaj liczbę (0 = koniec): ")
if dane == "0":
break ← wyjście z pętli
print(f"Podałeś: {dane}")
Przykład z życia
Bankomat pytający o PIN: program w kółko prosi o kod, dopóki nie zostanie podany poprawny PIN ALBO nie wyczerpie się limit 3 prób (po czym karta zostaje zablokowana) — to dokładnie wzorzec pętli while z licznikiem prób i instrukcją break po sukcesie.
petla_while.py
# Podstawowa pętla while - liczenie do 5
licznik = 1
while licznik <= 5:
print(licznik)
licznik += 1 # KLUCZOWE - bez tego pętla byłaby nieskończona!
print("Koniec liczenia")
# Pętla z warunkiem zależnym od danych użytkownika
haslo_docelowe = "python123"
proba = ""
while proba != haslo_docelowe:
proba = input("Podaj hasło: ")
print("Dostęp przyznany!")
# while True + break - wzorzec "menu z wyjściem"
suma = 0
while True:
tekst = input("Podaj liczbę do zsumowania (0 = zakończ): ")
liczba = int(tekst)
if liczba == 0:
break # natychmiastowe wyjście z pętli
suma += liczba
print(f"Suma podanych liczb: {suma}")
Komentarz i wyjaśnienie kodu
W pierwszym przykładzie licznik += 1 MUSI znaleźć się WEWNĄTRZ pętli (na tym samym poziomie wcięcia co print(licznik)) — gdyby był poza pętlą (mniej wcięty), licznik nigdy by się nie zwiększył i pętla działałaby w nieskończoność.
W drugim przykładzie warunek pętli (proba != haslo_docelowe) jest sprawdzany PRZED każdą iteracją — jeśli użytkownik za PIERWSZYM razem poda poprawne hasło, ciało pętli wykona się DOKŁADNIE RAZ.
Wzorzec while True: z break jest wygodny, gdy trudno sformułować warunek NA POCZĄTKU pętli (bo zależy od danych, które dopiero pojawią się w środku) — zamiast tego pętla "kręci się zawsze", a decyzję o zakończeniu podejmujemy w dogodnym momencie wewnątrz, instrukcją break.
Ćwiczenie samodzielne
Uruchom trzeci przykład (sumowanie liczb) i sprawdź, że wpisanie 0 od razu kończy program z poprawną sumą. Zmodyfikuj kod tak, żeby zamiast sumy liczył ŚREDNIĄ podanych liczb (będziesz potrzebować dodatkowego licznika, ile liczb podano).
Plac zabaw — wypróbuj online
Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.
Zadania do pracy własnej
Napisz program, który wypisuje kolejne liczby parzyste od 2 do 20 przy użyciu pętli
while.Napisz program symulujący prosty bankomat: użytkownik ma maksymalnie 3 próby podania poprawnego PIN-u (ustal PIN na sztywno w kodzie, np.
"1234"). Po 3 błędnych próbach wypisz "Karta zablokowana", po poprawnej — "Dostęp przyznany" i natychmiast zakończ pętlę.Napisz program obliczający sumę cyfr podanej przez użytkownika liczby całkowitej metodą
while(bez zamiany liczby na tekst) — wskazówka:liczba % 10daje ostatnią cyfrę, aliczba // 10"ucina" tę cyfrę. Powtarzaj, dopóki liczba nie stanie się równa 0.
Typowe błędy
Zapominanie o modyfikacji zmiennej sterującej wewnątrz pętli — najczęstsza przyczyna pętli nieskończonej; zawsze sprawdź, czy coś w ciele pętli realnie zbliża warunek do False.
Umieszczenie modyfikacji zmiennej sterującej w NIEWŁAŚCIWYM miejscu (np. przed sprawdzeniem warunku zamiast po przetworzeniu danych) może dać wynik "o jeden" błędny (za mało lub za dużo powtórzeń).
Używanie while tam, gdzie lepszy byłby for — jeśli liczba powtórzeń jest ZNANA Z GÓRY (np. "policz coś dla liczb od 1 do 10"), pętla for (kolejna lekcja) jest naturalniejszym wyborem i mniej podatna na błąd pętli nieskończonej.
Nawiązanie do egzaminu zawodowego
Pętla while pojawia się na maturze wszędzie tam, gdzie liczba powtórzeń zależy od DANYCH WEJŚCIOWYCH, a nie jest ustalona z góry — np. "wczytuj liczby, dopóki użytkownik nie wpisze 0" albo "szukaj, dopóki nie znajdziesz". W dziale "Algorytmy i złożoność" zobaczysz while w praktycznie każdym algorytmie iteracyjnym — od algorytmu Euklidesa po wyszukiwanie binarne.