Cykle while
for potrafi przechodzić nie tylko przez liczby, ale while powtarza tę czynność, dopóki warunek pozostaje spełniony, bez względu na to, ile razy to potrwa.
Gdy liczba powtórzeń nie jest znana z góry
for jest świetne, gdy wiemy z góry, ile razy
Musisz powtórzyć czynność – "4 boki kwadratu", "wszystkie litery słowa". A co jeśli
Liczba powtórzeń nie jest znana z góry – na przykład: "Powtarzaj, aż użytkownik zgadnie
liczba"? Dla takich problemów istnieje drugi typ cyklu — while.
Cykle while
W przeciwieństwie do for, while
powtarza się ten warunek nadal jest prawdziwy:
count = 0
while count < 5:
print(count)
count += 1
Kanoniczne flowchart cyklu while
Trzy części cyklu while
| Część | Kodeks | Rola |
|---|---|---|
| Inicjalizacja | count = 0 | przygotowuje stan PRZED pierwszym sprawdzeniem warunku |
| Stan | count < 5 | sprawdzane przed każdą iteracją, w tym pierwszą |
| Aktualizacja | count += 1 | zmienia stan tak, aby warunek w końcu stał się fałszywy |
| Iteracja | Sprawdzanie count lt 5 | Podsumowanie | count po kroku |
|---|---|---|---|
| 1 | 0 < 5 → tak | 0 | 1 |
| 2 | 1 < 5 → tak | 1 | 2 |
| 3 | 2 < 5 → tak | 2 | 3 |
| 4 | 3 < 5 → tak | 3 | 4 |
| 5 | 4 < 5 → tak | 4 | 5 |
| — | 5 < 5 → nie | pętla zakończona | — |
while sprawdzane do ciało, co oznacza, że jeśli warunek jest początkowo fałszywy, ciało nie zostanie w ogóle wykonane (zero iteracji). W Python nie ma osobnej pętli „najpierw wykonaj, potem sprawdź” do/while) — jeśli takie zachowanie jest potrzebne, symulują je poprzez while True z break na końcu ciała (tę technikę zobaczymy na następnej stronie).Nieskończona pętla – celowo i przypadkowo
Dokładnie przyjrzyj się temu kodowi:
count = 0
while count < 5:
print(count)
# zapomniałem count += 1!
Ctrl+C (lub przycisk „Stop”/„Interrupt kernel” w Jupyter). Zawsze sprawdzaj, co jest w środku while istnieje krok, który prędzej czy później sprawi, że stan zostanie fałszywy.while True też jest normalne
while True tworzy pętlę, której stan sam nigdy się nie powtórzy
nie stanie się fałszywym — jedynym wyjściem: break wewnątrz ciała.
Jest to powszechna i absolutnie poprawna technika, gdy stan zatrzymania jest bardziej naturalny
Sprawdź na środku ciała, a nie na początku – użyjemy tego na następnej stronie.
while True: nie jest samo w sobie „złą praktyką” — to świadome narzędzie. Problem pojawia się dopiero wtedy, gdy wewnątrz zapomni się ustawić break – wtedy ten cykl naprawdę nigdy się nie skończy.Iteracja po łańcuchach znaków — przypomnienie
Struna to łańcuch znaków (Rozdział 8) — for
potrafi iterować po niej bezpośrednio, bez indeksów (szczegółowa analiza indeksu i wartości — na stronie o enumerate()):
for letter in "Python":
print(letter)