Przejdź do głównej treści
eLearner.app
Moduł 2 · Lekcja 2 z 46/36 w kursie~8 min
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

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

Wcię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:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

Pętla nieskończona + wewnętrzny warunek wyjścia — przydatne, gdy warunek jest oceniany po wykonaniu jakiejś operacji:

Python
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:

Python
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

Ćwiczenie#python.m2.l2.e1
Próby: 0Ładowanie...

Znajdź najmniejszą liczbę całkowitą `n >= 1` taką, że 2**n przekroczy milion. Przypisz ją do zmiennej `result` i oceń (powinno wyjść 20).

Ładowanie edytora...
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

Ćwiczenie#python.m2.l2.e2
Próby: 0Ładowanie...

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`.

Ładowanie edytora...
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

Ćwiczenie#python.m2.l2.e3
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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