Structuri repetitive
Structurile repetitive (bucle) permit executarea unui bloc de cod de mai multe ori. În loc să scrii același cod de 100 de ori, scrii o buclă care îl repetă.
Bucla for
Folosită când știi de câte ori vrei să repeți o operație.
Exemplu simplu
for i in range(1, 3):
print("Happy Birthday!")
Happy Birthday!
Happy Birthday!
Iterare cu range()
Funcția range() generează o secvență de numere. Poate primi 1, 2 sau 3 argumente:
range(stop) # de la 0 la stop-1
range(start, stop) # de la start la stop-1
range(start, stop, pas) # de la start la stop-1, cu pasul specificat
Exemple cu range()
# Afișează numerele de la 0 la 4
for i in range(5):
print(i)
for i in range(1, 10, 1):
print(i, end=' ')
1 2 3 4 5 6 7 8 9
# Numere pare
for i in range(0, 11, 2):
print(i)
# Numere impare
for i in range(1, 10, 2):
print(i, end=' ')
1 3 5 7 9
# Numărătoare inversă
for i in range(10, 0, -1):
print(i, end=' ')
10 9 8 7 6 5 4 3 2 1
Iterare peste colecții
Bucla for poate parcurge orice colecție (listă, string, etc.):
# Iterare peste o listă
fructe = ["măr", "pară", "banană"]
for fruct in fructe:
print(fruct)
# Iterare peste un string
for caracter in "Python":
print(caracter)
# Iterare cu index folosind enumerate()
for index, fruct in enumerate(fructe):
print(f"{index}: {fruct}")
Bucla while
Folosită când nu știi exact de câte ori vei repeta, dar știi condiția de oprire. Bucla continuă cât timp condiția e adevărată.
# Afișează numerele de la 1 la 5
i = 1
while i <= 5:
print(i)
i += 1
Exemplu: Validare input
numar = int(input("Introdu un număr pozitiv: "))
while numar <= 0:
print("Număr invalid!")
numar = int(input("Introdu un număr pozitiv: "))
Instrucțiuni de control
break
Oprește bucla complet, chiar dacă condiția e încă adevărată:
for i in range(10):
if i == 5:
break
print(i)
# Afișează: 0, 1, 2, 3, 4
continue
Sare la următoarea iterație, ignorând restul codului din buclă pentru iterația curentă:
for i in range(5):
if i == 2:
continue
print(i)
# Afișează: 0, 1, 3, 4
else în bucle
Blocul else se execută dacă bucla s-a terminat normal (fără break):
for i in range(5):
if i == 10:
break
else:
print("Bucla s-a terminat fără break")
Bucle imbricate
O buclă în interiorul altei bucle:
# Tabla înmulțirii
for i in range(1, 4):
for j in range(1, 4):
print(f"{i} x {j} = {i*j}")
print() # linie goală între serii
Comparație for vs while
for |
while |
|---|---|
| Număr cunoscut de iterații | Număr necunoscut de iterații |
| Iterare peste colecții | Condiție de oprire |
| Mai puțin predispus la bucle infinite | Risc de buclă infinită |
Aplicații practice
Suma numerelor de la 1 la n
n = int(input("n = "))
suma = 0
for i in range(1, n + 1):
suma += i
print(f"Suma: {suma}")
Verificare număr prim
Un număr prim este un număr natural mai mare decât 1 care nu se divide exact decât la 1 și la el însuși.
n = int(input("n = "))
este_prim = True
if n < 2:
este_prim = False
else:
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
este_prim = False
break
if este_prim:
print(f"{n} este prim")
else:
print(f"{n} nu este prim")
Ghicește numărul
import random
numar_secret = random.randint(1, 100)
incercari = 0
while True:
ghicire = int(input("Ghicește numărul (1-100): "))
incercari += 1
if ghicire < numar_secret:
print("Prea mic!")
elif ghicire > numar_secret:
print("Prea mare!")
else:
print(f"Corect! Ai ghicit în {incercari} încercări.")
break