Bucla while in Python
Introducere
Bucla while executa un bloc de cod cat timp o conditie este True. Este utila cand nu stim dinainte de cate ori trebuie sa repetam.
Sintaxa de Baza
while conditie:
# bloc de cod
# se executa cat timp conditia e True
Exemplu simplu:
contor = 1
while contor <= 5:
print(contor)
contor += 1 # Important: actualizeaza conditia!
# Afiseaza: 1 2 3 4 5
Anatomia unei Bucle while
# 1. Initializare
i = 0
# 2. Conditie de continuare
while i < 5:
# 3. Corpul buclei
print(i)
# 4. Actualizare (evita bucla infinita!)
i += 1
Bucle Infinite
O bucla infinita apare cand conditia nu devine niciodata False:
# GRESIT - bucla infinita!
i = 0
while i < 5:
print(i)
# Lipsa: i += 1
# CORECT
i = 0
while i < 5:
print(i)
i += 1
Bucla infinita intentionata:
while True:
comanda = input("Comanda: ")
if comanda == "exit":
break # Iese din bucla
print(f"Ai scris: {comanda}")
Instructiunea break
break iese imediat din bucla:
i = 0
while i < 10:
if i == 5:
break # Iese cand i == 5
print(i)
i += 1
# Afiseaza: 0 1 2 3 4
Cautarea unui element:
numere = [3, 7, 2, 9, 5]
cautat = 9
gasit = False
i = 0
while i < len(numere):
if numere[i] == cautat:
gasit = True
break
i += 1
print(f"Gasit: {gasit}") # Gasit: True
Instructiunea continue
continue sare la urmatoarea iteratie:
i = 0
while i < 5:
i += 1
if i == 3:
continue # Sare peste print cand i == 3
print(i)
# Afiseaza: 1 2 4 5 (fara 3)
Filtrare numere:
i = 0
while i < 10:
i += 1
if i % 2 == 0:
continue # Sare peste numere pare
print(i)
# Afiseaza: 1 3 5 7 9
Clauza else la while
Blocul else se executa cand conditia devine False (nu si la break):
i = 0
while i < 3:
print(i)
i += 1
else:
print("Bucla terminata normal")
# Afiseaza: 0 1 2 Bucla terminata normal
Cu break:
i = 0
while i < 5:
if i == 3:
break
print(i)
i += 1
else:
print("Acest mesaj nu apare") # Nu se executa!
# Afiseaza: 0 1 2
Aplicatie practica - cautare:
numere = [1, 3, 5, 7, 9]
cautat = 4
i = 0
while i < len(numere):
if numere[i] == cautat:
print(f"Gasit la index {i}")
break
i += 1
else:
print("Nu a fost gasit") # Se afiseaza
# Afiseaza: Nu a fost gasit
Pattern-uri Comune
Citire pana la valoare speciala:
total = 0
while True:
numar = int(input("Numar (0 = stop): "))
if numar == 0:
break
total += numar
print(f"Total: {total}")
Validare input:
while True:
varsta = input("Varsta (1-120): ")
if varsta.isdigit():
varsta = int(varsta)
if 1 <= varsta <= 120:
break
print("Varsta invalida!")
print(f"Varsta: {varsta}")
Numaratoare inversa:
n = 5
while n > 0:
print(n)
n -= 1
print("Start!")
# 5 4 3 2 1 Start!
Comparatie while vs for
| Criteriu | while | for |
|---|---|---|
| Numar iteratii | Necunoscut | Cunoscut |
| Conditie | Orice expresie | Iterare secventa |
| Risc infinit | Da | Nu |
| Caz de utilizare | Input utilizator | Parcurgere colectii |
# for - cand stii cate iteratii
for i in range(5):
print(i)
# while - cand nu stii cate iteratii
raspuns = ""
while raspuns != "da":
raspuns = input("Continui? ")
Greseli Frecvente
1. Bucla infinita accidentala
i = 0
while i < 5:
print(i)
# Lipsa: i += 1
2. Conditie gresita
i = 10
while i > 5: # Niciodata False daca i creste
print(i)
i += 1 # Trebuia i -= 1
3. Off-by-one errors
# Vrei 5 iteratii dar faci 4
i = 1
while i < 5: # 1,2,3,4 (4 iteratii)
print(i)
i += 1
# Corect pentru 5 iteratii
i = 1
while i <= 5: # 1,2,3,4,5 (5 iteratii)
print(i)
i += 1
Puncte Cheie pentru Examen
whilerepeta cat timp conditia eTruebreakiese din bucla imediatcontinuesare la urmatoarea iteratieelsela while se executa doar daca nu a fostbreak- Asigura-te ca conditia devine
Falsela un moment dat - Foloseste
while True+breakpentru bucle cu iesire conditionata
Intrebari de Verificare
- Cand se executa blocul
elsela o bucla while? - Care e diferenta intre
breaksicontinue? - Cum eviti o bucla infinita?
- Cand folosesti
whilein loc defor?