Menu

Pętla while w Pythonie: składnia, while True i unikanie nieskończonych pętli

Kiedy wybrać pętlę while zamiast for, jak unikać nieskończonych pętli i jakie wzorce najczęściej pojawiają się w prawdziwym kodzie.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Pętla, która pilnuje warunku

Podczas gdy for przechodzi po znanej sekwencji, while powtarza się tak długo, jak warunek jest prawdziwy. Sięgasz po nią, gdy nie wiesz z góry, ile iteracji będzie potrzebnych: ponawianie próby, aż coś zadziała, wczytywanie danych, dopóki użytkownik nie powie stop, odpytywanie usługi, aż odpowie.

Budowa jest prosta:

To wypisuje liczby od 0 do 4. Python sprawdza warunek na początku każdej iteracji. Jeśli jest prawdziwy, wykonuje się ciało pętli. Potem warunek jest sprawdzany ponownie. Gdy stanie się fałszywy, pętla się kończy.

Zwróć uwagę, że count += 1 ma znaczenie. Bez tej linii warunek byłby prawdziwy w nieskończoność, czyli powstałaby nieskończona pętla. To główna pułapka while i główny powód, żeby wybierać for wszędzie tam, gdzie się da.

Kiedy while to właściwe narzędzie

Kilka klasycznych zastosowań:

Ponawianie aż do skutku.

Wczytywanie danych, dopóki użytkownik nie zakończy.

Przetwarzanie kolejki.

Wspólny mianownik: czekasz na zmianę stanu, a nie przechodzisz po kolejnych elementach.

while True jest w porządku

Ten wzorzec zobaczysz bardzo często:

To idiomatyczny Python, gdy "prawdziwy" warunek wyjścia znajduje się w ciele pętli, a nie jest czymś, co da się czytelnie sprawdzić na początku. Taki kod czyta się łatwiej niż wymyśloną flagę should_continue, którą aktualizujesz w jednym miejscu, a sprawdzasz w innym.

Jedyna zasada: upewnij się, że istnieje break (albo return, albo zgłoszony wyjątek), do którego kod w końcu dotrze. Bezwarunkowe while True: bez wyjścia to klasyczny sposób na zawieszenie programu.

Jak uniknąć nieskończonej pętli

Nieskończone pętle powstają, gdy warunek pozostaje prawdziwy na zawsze. Typowi winowajcy:

  • Brak aktualizacji zmiennej. while count < 5: wymaga, żeby coś w ciele pętli zmieniało count.
  • Aktualizacja niewłaściwej zmiennej. while i < 10:, a w środku j += 1: łatwo to przeoczyć, gdy w kodzie jest więcej niż kilka zmiennych.
  • Porównywanie liczb zmiennoprzecinkowych. while x != 1.0: może kręcić się w nieskończoność, jeśli x tylko zbliża się do 1.0. Zamiast tego użyj <= albo abs(x - 1.0) < tolerance.

Jeśli utkniesz w nieskończonej pętli w terminalu, naciśnij Ctrl+C. To wysyła sygnał przerwania i Python przestaje robić to, co akurat robi.

break, continue i else

while obsługuje te same trzy narzędzia sterowania przepływem co for:

  • break natychmiast kończy pętlę.
  • continue przechodzi do następnej iteracji (więc warunek jest sprawdzany ponownie).
  • else wykonuje się, jeśli pętla zakończyła się bez break.

To prosty test pierwszości. Jeśli wewnętrzne break zadziała, liczba jest złożona. Jeśli pętla zakończy się naturalnie (warunek stanie się fałszywy), wykona się else i uzna liczbę za pierwszą.

while czy for: co wybrać?

Szybki test w głowie:

  • Masz kolekcję do przejścia? → for.
  • Chcesz powtórzyć coś określoną liczbę razy? → for i in range(n):.
  • Powtarzasz, dopóki nie zmieni się jakiś warunek? → while.

Na początku przygody z Pythonem zauważysz, że for wystarcza w 90% pętli. while pojawia się przy odpytywaniu, ponawianiu prób albo budowaniu prostego REPL. Jeśli używasz while do przechodzenia po liście za pomocą indeksu, to znak, że warto przejść na for + enumerate.

Praktyczny program z while

Gra w zgadywanie liczby to klasyczny przykład, bo liczba iteracji zależy od tego, jak gra użytkownik:

Nie da się z góry przewidzieć, ile prób to zajmie, bo wszystko zależy od odpowiedzi użytkownika. Właśnie dlatego istnieje while.

Co dalej

Znasz już oba rodzaje pętli, które daje Python. Następny temat to szczegóły range(): pojawia się w niemal każdej liczącej pętli for, a jego drobne niuanse warto zrozumieć, zanim przejdziemy do kolekcji.

Najczęściej zadawane pytania

Kiedy używać pętli while zamiast pętli for?

Użyj while, gdy nie wiesz z góry, ile iteracji będzie potrzebnych, na przykład przy ponawianiu próby, aż coś się uda, albo przy wczytywaniu danych, dopóki użytkownik nie wpisze 'quit'. Użyj for, gdy przechodzisz po znanej kolekcji.

Jak uniknąć nieskończonej pętli w Pythonie?

Upewnij się, że coś wewnątrz pętli w końcu sprawi, że warunek stanie się fałszywy. Najczęstszą przyczyną nieskończonych pętli jest brak aktualizacji zmiennej, od której zależy warunek. Jeśli trafisz na taką pętlę, naciśnij Ctrl+C w terminalu, żeby ją zatrzymać.

Czy while True to zła praktyka?

Samo w sobie nie. while True: z wyraźnym break w środku to całkowicie normalny wzorzec typu "powtarzaj, aż trafimy na konkretny warunek wyjścia". To czystsze niż wymyślanie flagi logicznej, którą trzeba obsługiwać w dwóch miejscach.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ