Salt la conținutul principal
Modulul 2 · Lecția 2 din 46/36 în curs~8 min
Lecții din modul (2/4)

bucle while

Bucla while repetă un bloc atâta timp cât o condiție rămâne adevărată. Utilizați while atunci când nu știți dinainte de câte iterații veți avea nevoie: numărul de runde depinde de ceva care se schimbă în interiorul buclei.

Sintaxă

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

Blocul indentat este executat în mod repetat. Înainte de fiecare iterație Python evaluează condiția: de îndată ce devine falsă, bucla se termină și execuția continuă după bloc.

Modele comune

Contor manual — echivalent cu un for clasic în alte limbi:

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

Buclă infinită + condiție de ieșire internă — utilă atunci când condiția este evaluat după ce a făcut ceva:

Python
acc = 0
while True:
    acc = acc + 1
    if acc * acc > 100:
        break
acc  # 11   (11*11 = 121 is the first square > 100)

break iese imediat din bucla cea mai interioară (o vom vedea în următorul lectie).

Greșeala clasică: bucla infinită

Dacă variabila din condiția nu se modifică în interiorul buclei, programul nu se termină niciodată. Este bug-ul numărul unu cu while:

Python
n = 0
while n < 10:
    print(n)   # n is never modified → infinite loop!

În exercițiile noastre există un timeout de execuție, așa că o buclă infinită va eșua cu un mesaj clar în loc să înghețe browserul. Dar în producție an bucla infinită este o eroare serioasă.

Risc de bucle infinite și condiții de terminare

O buclă while se execută atâta timp cât condiția sa este evaluată la Adevărat. Dacă uitați să actualizați variabilele care afectează condiția, bucla va rula la infinit, înghețând timpul de execuție. Asigurați-vă întotdeauna că corpul buclei progresează către starea de ieșire.

Încercați-l singur

Exercițiu#python.m2.l2.e1
Încercări: 0Se încarcă…

Găsiți cel mai mic număr întreg `n >= 1` astfel încât 2**n să depășească un milion. Atribuiți-l la „rezultat” și evaluați-l (ar trebui să fie 20).

Se încarcă editorul...
Afișează indiciu

2**20 = 1.048.576 este primul care depășește 1.000.000.

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m2.l2.e2
Încercări: 0Se încarcă…

Începând de la `n = 1000`, înjumătățiți n cu împărțirea întregului (n // 2) până când devine 0. Numărați câte iterații sunt necesare în `pași`. Evaluați „pașii”.

Se încarcă editorul...
Afișează indiciu

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: zece trepte.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m2.l2.e3
Încercări: 0Se încarcă…

Given the variable `n = 32`, write a `while` loop to count how many times you can divide `n` by 2 (using floor division `//`) before `n` becomes less than or equal to 1. Store the count in `divisions` and evaluate it.

Se încarcă editorul...
Afișează indiciu

The while condition is n > 1. Inside the loop, divide n by 2 and increment divisions by 1.

Soluție disponibilă după 3 încercări