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.

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:

  1. Obliczenie wartości wyrażenia logicznego warunek.
  2. Jeśli wynik to True – wykonanie bloku instrukcji.
  3. Powrót do punktu 1.
  4. 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:

  • 0
  • 0.0
  • ""
  • []
  • None
  • False

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

  • while uż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.