Lekcje modułu (2/4)
Pętle while
Pętla while powtarza blok tak długo, jak warunek pozostaje prawdziwy. Używaj
while, gdy nie wiesz z góry, ilu iteracji będziesz potrzebować: liczba rund
zależy od czegoś, co zmienia się wewnątrz pętli.
Składnia
n = 1
while n < 1000:
n = n * 2
n # 1024Wcięty blok jest wykonywany wielokrotnie. Przed każdą iteracją Python ocenia warunek: gdy tylko stanie się on fałszywy, pętla kończy się, a wykonywanie jest kontynuowane po bloku.
Typowe wzorce
Ręczny licznik — odpowiednik klasycznego for w innych językach:
i = 0
while i < 5:
print(i)
i = i + 1Pętla nieskończona + wewnętrzny warunek wyjścia — przydatne, gdy warunek jest oceniany po wykonaniu jakiejś operacji:
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 is the first square > 100)break natychmiast opuszcza najbardziej wewnętrzną pętlę.
Klasyczny błąd: pętla nieskończona
Jeśli zmienna w warunku nie zmienia się wewnątrz pętli, program
nigdy się nie zakończy. To błąd numer jeden przy pętli while:
n = 0
while n < 10:
print(n) # n is never modified → infinite loop!W naszych ćwiczeniach obowiązuje limit czasu wykonywania, więc pętla nieskończona zakończy się niepowodzeniem z jasnym komunikatem, zamiast zawiesić przeglądarkę. Jednak na produkcji pętla nieskończona jest poważnym błędem.
Ryzyko pętli nieskończonej i warunki zakończenia
Pętla while działa tak długo, jak jej warunek ma wartość True. Jeśli zapomnisz o aktualizacji zmiennych wpływających na warunek, pętla będzie działać w nieskończoność, zawieszając środowisko wykonawcze. Zawsze upewnij się, że ciało pętli przybliża Cię do warunku wyjścia.
Spróbuj sam
Znajdź najmniejszą liczbę całkowitą `n >= 1` taką, że 2**n przekroczy milion. Przypisz ją do zmiennej `result` i oceń (powinno wyjść 20).
Pokaż wskazówkę
2**20 = 1 048 576 to pierwsza wartość, która przekracza 1 000 000.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
Zaczynając od `n = 1000`, dziel `n` na pół za pomocą dzielenia całkowitego (n // 2), aż osiągnie 0. Policz liczbę iteracji w zmiennej `steps`. Oceń `steps`.
Pokaż wskazówkę
1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: dziesięć kroków.
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
Mając daną zmienną `n = 32`, napisz pętlę `while`, aby policzyć, ile razy możesz podzielić `n` przez 2 (używając dzielenia całkowitego `//`), zanim `n` stanie się mniejsze lub równe 1. Zapisz wynik w zmiennej `divisions` i oceń go.
Pokaż wskazówkę
Warunek pętli while to n > 1. Wewnątrz pętli podziel n przez 2 i zwiększ divisions o 1.
Rozwiązanie dostępne po 3 próbach