Bucle în Python: for și while
Bucla for
Iterare prin secvențe
# Prin listă
for x in [1, 2, 3]:
print(x)
# Prin șir
for c in "Python":
print(c)
# Prin dicționar (chei)
d = {"a": 1, "b": 2}
for key in d:
print(key)
# Prin dicționar (chei și valori)
for key, value in d.items():
print(key, value)
Cu range()
# Repetă de 5 ori
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# De la 2 la 7
for i in range(2, 8):
print(i) # 2, 3, 4, 5, 6, 7
# Cu pas
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8
# În ordine inversă
for i in range(10, 0, -1):
print(i) # 10, 9, 8, ..., 1
Cu enumerate()
fructe = ["mar", "para", "banana"]
for index, fruct in enumerate(fructe):
print(f"{index}: {fruct}")
# 0: mar
# 1: para
# 2: banana
Bucla while
Forma de bază
x = 0
while x < 5:
print(x)
x += 1
# 0, 1, 2, 3, 4
Buclă infinită controlată
while True:
raspuns = input("Continuă? (da/nu): ")
if raspuns == "nu":
break
Instrucțiuni de Control
break - Ieșire din buclă
for i in range(10):
if i == 5:
break
print(i)
# 0, 1, 2, 3, 4
continue - Salt la următoarea iterație
for i in range(5):
if i == 2:
continue
print(i)
# 0, 1, 3, 4
else pe bucle
for i in range(5):
if i == 10: # Nu se găsește
break
else:
print("Bucla s-a terminat normal")
# Se afișează: "Bucla s-a terminat normal"
Bucle Imbricate
for i in range(3):
for j in range(3):
print(f"({i},{j})", end=" ")
print()
# (0,0) (0,1) (0,2)
# (1,0) (1,1) (1,2)
# (2,0) (2,1) (2,2)
Tehnici Comune
Găsirea unui element
numere = [3, 1, 4, 1, 5, 9, 2, 6]
cautat = 5
for i, n in enumerate(numere):
if n == cautat:
print(f"Găsit la indexul {i}")
break
else:
print("Nu s-a găsit")
Acumulare
numere = [1, 2, 3, 4, 5]
suma = 0
for n in numere:
suma += n
print(suma) # 15
De Reținut
Blocul
elseal unei bucle se execută doar dacă bucla s-a terminat normal (fărăbreak).
Întrebări de Verificare
- Ce diferență este între
forșiwhile? - Ce face instrucțiunea
continue? - Când se execută blocul
elseal unei bucle? - Cum iterezi prin cheile și valorile unui dicționar?