🐍

Bucla for si Functia range()

Programare Python Începător 1 min citire 0 cuvinte

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-1
  • range(a, b) genereaza a pana la b-1
  • range(a, b, step) cu pas (poate fi negativ)
  • enumerate() pentru index + element
  • zip() pentru iterare paralela
  • break iese, continue sare
  • else la for se executa fara break
  • Nu modifica lista in timpul iterarii!

Intrebari de Verificare

  1. Ce afiseaza list(range(2, 8, 2))?
  2. Cand se executa blocul else la for?
  3. Cum iterezi prin index si element simultan?
  4. Ce se intampla daca modifici lista in timpul iterarii?

📚 Articole Corelate