Pętla while
Pętla while jest jednym z podstawowych mechanizmów sterowania przepływem programu. Umożliwia wielokrotne wykonywanie określonego bloku kodu tak długo, jak długo spełniony jest warunek logiczny. W przeciwieństwie do pętli iteracyjnych opartych na kolekcjach (np. for), konstrukcja ta opiera się wyłącznie na warunku logicznym i nie wymaga z góry znanej liczby iteracji. Zrozumienie tej konstrukcji jest kluczowe w praktyce programistycznej, dlatego poniższe notatki systematycznie omawiają zagadnienie Pętli while.
Spis treści
Pętla while – składnia, semantyka i sposób działania warunku logicznego
Podstawowa składnia w Pythonie:
while warunek:
instrukcje
Działanie jest deterministyczne i przebiega w następującej kolejności:
- Obliczenie wartości wyrażenia logicznego
warunek. - Jeśli wynik to
True– wykonanie bloku instrukcji. - Powrót do punktu 1.
- Jeśli wynik to
False– zakończenie pętli.
Kluczowe jest zrozumienie, że warunek sprawdzany jest przed każdą iteracją. Oznacza to, że jeśli początkowo warunek jest fałszywy, blok nie wykona się ani razu.
Przykład minimalny:
i = 0while i < 5:
print(i)
i = i + 1
Przebieg:
- i = 0 → 0 < 5 → True → druk 0
- i = 1 → 1 < 5 → True → druk 1
- …
- i = 5 → 5 < 5 → False → koniec
Warunek może być dowolnym wyrażeniem logicznym, również złożonym:
while x > 0 and y != 10:
W Pythonie nie istnieje specjalny typ warunku – każda wartość podlegająca konwersji do typu bool może być użyta w instrukcji while.
Wartości interpretowane jako False:
00.0""[]NoneFalse
Wszystko inne jest traktowane jako True.
Pętla while – kontrola przepływu, break, continue, else i nieskończone iteracje
Nieskończona pętla
Najprostsza postać:
while True:
print("działa bez końca")
Warunek zawsze prawdziwy → pętla bez końca.
Zatrzymanie wymaga instrukcji break:
while True:
x = int(input("Podaj liczbę: "))
if x == 0:
break
To typowy schemat przetwarzania danych wejściowych.
Instrukcja break
break natychmiast przerywa działanie pętli i przechodzi do kodu po niej.
i = 0while i < 10:
if i == 5:
break
print(i)
i += 1
Wynik: 0 1 2 3 4
Pętla kończy się przed spełnieniem warunku końcowego.
Instrukcja continue
continue pomija pozostałą część bieżącej iteracji i wraca do sprawdzania warunku.
i = 0while i < 5:
i += 1
if i == 3:
continue
print(i)
Wynik: 1 2 4 5
Warto zwrócić uwagę, że modyfikacja zmiennej sterującej powinna znajdować się przed continue, inaczej łatwo o pętlę nieskończoną.
Konstrukcja else w pętli while
Python posiada mechanizm:
while warunek:
instrukcje
else:
instrukcje_po_zakończeniu
Blok else wykona się tylko wtedy, gdy pętla zakończy się naturalnie (bez break).
Przykład:
i = 0while i < 3:
print(i)
i += 1
else:
print("Koniec bez break")
Jeśli dodamy break, blok else się nie wykona.
To mechanizm rzadko używany, ale przydatny np. przy wyszukiwaniu elementu.
Pętla while – wzorce algorytmiczne i zastosowania praktyczne
1. Zliczanie iteracyjne
Klasyczny licznik:
n = 10
i = 0
suma = 0while i <= n:
suma += i
i += 1print(suma)
To odpowiednik matematycznej sumy ciągu.
2. Algorytm Euklidesa (NWD)
a = 48
b = 18while b != 0:
r = a % b
a = b
b = rprint(a)
Mechanizm:
- zamiana argumentów
- operacja modulo
- redukcja problemu
Pętla kończy się, gdy reszta wynosi 0.
3. Symulacja procesu do momentu spełnienia warunku
Przykład – znajdowanie pierwiastka metodą przybliżeń:
x = 25
przyblizenie = x
epsilon = 0.0001while abs(przyblizenie * przyblizenie - x) > epsilon:
przyblizenie = (przyblizenie + x / przyblizenie) / 2print(przyblizenie)
Warunek nie jest liczbowy wprost, tylko oparty na błędzie przybliżenia.
4. Odczyt danych do końca pliku
plik = open("dane.txt")linia = plik.readline()while linia != "":
print(linia.strip())
linia = plik.readline()plik.close()W Pythonie częściej stosuje się for, ale mechanizm logiczny while jest czytelny.
5. Implementacja odpowiednika w C
#include <stdio.h>int main() {
int i = 0; while(i < 5) {
printf("%d\n", i);
i = i + 1;
} return 0;
}Semantyka identyczna: warunek przed wejściem w blok.
6. Implementacja w C++
#include <iostream>
using namespace std;int main() {
int i = 0; while(i < 5) {
cout << i << endl;
i++;
} return 0;
}
Różnice dotyczą składni języka, nie logiki.
Różnica między while a for w Pythonie
for:
- iteracja po sekwencji
- znana liczba kroków
- czytelniejszy przy pracy na kolekcjach
while:
- kontrola przez warunek
- nieznana liczba iteracji
- dobre do algorytmów opartych na zbieżności
Zamiana konstrukcji:
i = 0
while i < 5:
print(i)
i += 1
odpowiada:
for i in range(5):
print(i)
Jednak while daje większą swobodę w sterowaniu logiką.
Typowe błędy i pułapki
1. Brak modyfikacji zmiennej sterującej
i = 0
while i < 5:
print(i)
Pętla nieskończona.
2. Modyfikacja zmiennej w złym miejscu przy continue
while i < 5:
if i == 3:
continue
i += 1
Brak zwiększenia przed continue → blokada.
3. Zbyt złożony warunek logiczny
Warunki wielokrotne powinny być rozpisane pomocniczo:
warunek = x > 0 and y < 10 and z != 3while warunek:
Zwiększa czytelność.
4. Nieczytelne pętle nieskończone
Lepszy wzorzec:
while True:
...
if warunek_zakonczenia:
break
niż sztuczne:
flaga = True
while flaga:
Zależności między pojęciami: pętla, warunek, zmienna sterująca, inwariant
W analizie algorytmicznej istotne są:
- warunek pętli – określa zbiór stanów dopuszczalnych
- zmienna sterująca – wpływa na zakończenie
- inwariant pętli – własność prawdziwa przed i po każdej iteracji
Przykład:
i = 0
suma = 0while i <= n:
suma += i
i += 1
Inwariant: suma zawiera sumę liczb od 0 do i-1.
Analiza poprawności algorytmu opiera się właśnie na inwariancie.
Uwagi praktyczne
whileużywać, gdy liczba iteracji nie jest znana z góry.- Unikać wielokrotnej modyfikacji tej samej zmiennej w kilku miejscach.
- Stosować ograniczniki bezpieczeństwa w algorytmach numerycznych.
- Testować przypadek brzegowy: warunek początkowo fałszywy.
- Przy pracy z wejściem użytkownika zawsze uwzględniać możliwość błędnych danych.
Pętla while jest konstrukcją prostą składniowo, ale bardzo silną semantycznie. Pozwala modelować procesy iteracyjne, algorytmy numeryczne, przetwarzanie danych strumieniowych oraz kontrolowane pętle nieskończone. Jej poprawne użycie wymaga świadomego kontrolowania warunku zakończenia i zmiennych sterujących.