Bucla for si Functia range()
Introducere
Bucla for in Python itereaza prin elementele unei secvente (lista, string, range, etc.). Este preferata cand stim cate iteratii vom face.
Sintaxa de Baza
for element in secventa:
# bloc de cod
# se executa pentru fiecare element
Iterare prin lista:
fructe = ["mar", "para", "banana"]
for fruct in fructe:
print(fruct)
# mar
# para
# banana
Iterare prin string:
for litera in "Python":
print(litera)
# P y t h o n (pe linii separate)
Functia range()
range() genereaza o secventa de numere pentru iterare.
range(stop) - de la 0 la stop-1:
for i in range(5):
print(i)
# 0 1 2 3 4 (NU include 5!)
range(start, stop) - de la start la stop-1:
for i in range(2, 6):
print(i)
# 2 3 4 5 (NU include 6!)
range(start, stop, step) - cu pas:
# Din 2 in 2
for i in range(0, 10, 2):
print(i)
# 0 2 4 6 8
# Numaratoare inversa
for i in range(5, 0, -1):
print(i)
# 5 4 3 2 1
# Pas negativ
for i in range(10, 0, -2):
print(i)
# 10 8 6 4 2
Convertire la lista:
print(list(range(5))) # [0, 1, 2, 3, 4]
print(list(range(2, 7))) # [2, 3, 4, 5, 6]
print(list(range(0, 10, 3))) # [0, 3, 6, 9]
Iterare cu Index
Folosind range si len:
fructe = ["mar", "para", "banana"]
for i in range(len(fructe)):
print(f"{i}: {fructe[i]}")
# 0: mar
# 1: para
# 2: banana
Folosind enumerate (recomandat):
fructe = ["mar", "para", "banana"]
for i, fruct in enumerate(fructe):
print(f"{i}: {fruct}")
# 0: mar
# 1: para
# 2: banana
# Cu start diferit
for i, fruct in enumerate(fructe, start=1):
print(f"{i}. {fruct}")
# 1. mar
# 2. para
# 3. banana
Iterare prin Dictionare
student = {"nume": "Ana", "varsta": 20, "nota": 9}
# Doar cheile (implicit)
for cheie in student:
print(cheie)
# nume varsta nota
# Cheile explicit
for cheie in student.keys():
print(cheie)
# Valorile
for valoare in student.values():
print(valoare)
# Ana 20 9
# Chei si valori
for cheie, valoare in student.items():
print(f"{cheie}: {valoare}")
# nume: Ana
# varsta: 20
# nota: 9
Instructiunile break si continue
break - iese din bucla:
for i in range(10):
if i == 5:
break
print(i)
# 0 1 2 3 4
continue - sare la urmatoarea iteratie:
for i in range(5):
if i == 2:
continue
print(i)
# 0 1 3 4 (fara 2)
Clauza else la for
Se executa daca bucla s-a terminat normal (fara break):
# Cu terminare normala
for i in range(3):
print(i)
else:
print("Terminat!")
# 0 1 2 Terminat!
# Cu break
for i in range(5):
if i == 3:
break
print(i)
else:
print("Terminat!") # Nu se executa!
# 0 1 2
Aplicatie - cautare:
numere = [1, 3, 5, 7, 9]
cautat = 5
for numar in numere:
if numar == cautat:
print(f"Gasit: {numar}")
break
else:
print("Nu a fost gasit")
# Gasit: 5
Bucle Imbricate (Nested)
for i in range(3):
for j in range(3):
print(f"({i}, {j})", end=" ")
print() # Linie noua
# (0, 0) (0, 1) (0, 2)
# (1, 0) (1, 1) (1, 2)
# (2, 0) (2, 1) (2, 2)
Tabla inmultirii:
for i in range(1, 6):
for j in range(1, 6):
print(f"{i*j:3}", end=" ")
print()
# 1 2 3 4 5
# 2 4 6 8 10
# 3 6 9 12 15
# 4 8 12 16 20
# 5 10 15 20 25
Iterare Simultana cu zip
nume = ["Ana", "Bob", "Cris"]
varste = [20, 25, 30]
for n, v in zip(nume, varste):
print(f"{n} are {v} ani")
# Ana are 20 ani
# Bob are 25 ani
# Cris are 30 ani
Pattern-uri Comune
Suma elementelor:
numere = [1, 2, 3, 4, 5]
total = 0
for n in numere:
total += n
print(total) # 15
# Sau mai simplu: sum(numere)
Gasire maxim:
numere = [3, 7, 2, 9, 5]
maxim = numere[0]
for n in numere[1:]:
if n > maxim:
maxim = n
print(maxim) # 9
# Sau mai simplu: max(numere)
Filtrare:
numere = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pare = []
for n in numere:
if n % 2 == 0:
pare.append(n)
print(pare) # [2, 4, 6, 8, 10]
Greseli Frecvente
1. Modificarea listei in timpul iterarii
# GRESIT - comportament imprevizibil!
lista = [1, 2, 3, 4, 5]
for x in lista:
if x % 2 == 0:
lista.remove(x)
# CORECT - itereaza printr-o copie
for x in lista[:]:
if x % 2 == 0:
lista.remove(x)
2. Confuzie cu range
# range(5) = 0,1,2,3,4 (nu include 5!)
for i in range(5):
print(i) # 0 1 2 3 4
# Pentru 1-5:
for i in range(1, 6):
print(i) # 1 2 3 4 5
3. Nefolosirea enumerate
# Ineficient
for i in range(len(lista)):
print(i, lista[i])
# Mai bun
for i, elem in enumerate(lista):
print(i, elem)
Puncte Cheie pentru Examen
range(n)genereaza 0 pana la n-1range(a, b)genereaza a pana la b-1range(a, b, step)cu pas (poate fi negativ)enumerate()pentru index + elementzip()pentru iterare paralelabreakiese,continuesareelsela for se executa fara break- Nu modifica lista in timpul iterarii!
Intrebari de Verificare
- Ce afiseaza
list(range(2, 8, 2))? - Cand se executa blocul
elsela for? - Cum iterezi prin index si element simultan?
- Ce se intampla daca modifici lista in timpul iterarii?