Pętla for a pętla while w Pythonie: kiedy użyć której

Obie pętle powtarzają kod, więc początkujący często zastanawiają się, którą wybrać. Prosta zasada: użyj pętli for, gdy wiesz, po czym iterujesz, a pętli while, gdy czekasz, aż coś się zmieni. Każdy przykład poniżej został uruchomiony, a pokazany wynik jest dokładny.

for z range: znana liczba powtórzeń

range(3) daje 0, 1 i 2. Zmienna pętli przyjmuje kolejno każdą z tych wartości. Koniec range nigdy nie jest wliczany.

for i in range(3):
    print(i)

Wynik:

0
1
2

for po liście: każdy element

Pętla for może przejść bezpośrednio przez listę, ciąg znaków, słownik i cokolwiek innego, po czym można przejść element po elemencie. Nie potrzebujesz indeksu.

for part in ["wrench", "cable"]:
    print(part)

Wynik:

wrench
cable

while: dopóki coś się nie zmieni

Pętla while sprawdza swój warunek przed każdym przebiegiem. Coś wewnątrz pętli musi zmienić ten warunek, inaczej pętla nigdy się nie zakończy. Tutaj bateria traci 3 jednostki, dopóki nie zostanie za mało energii, a z góry nie wiesz, ile będzie przebiegów.

battery = 10
steps = 0
while battery >= 3:
    battery -= 3
    steps += 1
print(steps)

Wynik:

3

break i continue

break natychmiast opuszcza pętlę. continue pomija resztę tego przebiegu i przechodzi do następnego. Oba działają w pętlach for i while.

for n in range(1, 8):
    if n % 2 == 0:
        continue
    if n > 5:
        break
    print(n)

Wynik:

1
3
5

Nieskończona pętla

Pętla while, której warunek nigdy nie staje się fałszywy, działa w nieskończoność. Jeśli program wygląda na zawieszony, sprawdź, czy zmienna w warunku naprawdę zmienia się wewnątrz pętli. Na tej stronie program działający dłużej niż pięć sekund jest zatrzymywany za ciebie.

Częste pytania

Czy każdą pętlę for da się zapisać jako while?
Tak, ale jest to dłuższe i łatwiej o błąd, bo licznik musisz kontrolować samodzielnie. Zawsze wybieraj for, gdy przechodzisz przez kolekcję lub stały zakres.
Jaka jest różnica między break a continue?
break kończy całą pętlę. continue pomija tylko bieżący przebieg i przechodzi do następnego.
Dlaczego moja pętla while się nie kończy?
Warunek pozostaje prawdziwy, bo nic w pętli nie zmienia zmiennej, którą warunek sprawdza. Dodaj linijkę, która przesuwa ją w stronę końca, na przykład n -= 1.

Ćwicz to