Lecții din modul (1/4)
pentru bucle și interval
Bucla for din Python este folosită pentru a repeta o secvență de elemente:
o listă, un șir, un interval, un dict... orice este „iterabil”.
parole = ["ciao", "mondo", "!"]
for p in parole:
print(p)
# ciao
# mondo
# !Modelul este întotdeauna același: for <variable> in <iterable>: urmat de
blocul indentat care va fi executat o dată pentru fiecare articol.
range(...): se generează intervale întregi
range produce o secvență leneșă de numere întregi. Trei forme:
range(5) # 0, 1, 2, 3, 4
range(2, 6) # 2, 3, 4, 5
range(0, 10, 2) # 0, 2, 4, 6, 8 (step)
range(5, 0, -1) # 5, 4, 3, 2, 1 (negative step)range este exclusiv în partea dreaptă, ca slice. Este un obiect leneș:
nu alocă memorie pentru toate numerele, le produce pe rând.
totale = 0
for i in range(1, 11):
totale = totale + i
totale # 55 (1+2+...+10)Repetare cu un index: enumerate
Când aveți nevoie de articol și de indexul acestuia împreună, utilizați enumerate:
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
print(i, p)
# 0 ciao
# 1 mondo
# 2 !enumerate produce (index, value) perechi pe care le atribuim direct la două
variabile prin despachetarea tuplelor (o vom vedea în modulul dedicat
structuri de date).
Iterarea a două secvențe în paralel: zip
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
print(f"{n} ha {a} anni")zip se oprește la cea mai scurtă secvență.
range() și lenea lui Python
În Python, funcția range() nu alocă o listă reală în memorie: returnează un generator leneș care produce numere pe rând, așa cum este cerut (de exemplu, într-o buclă for). Acest lucru permite iterarea peste milioane de numere întregi fără a umfla RAM. Pentru a inspecta valorile intervalului ca o listă, o puteți proiecta în mod explicit cu list(range(5)).
Încercați-l singur
Calculați suma numerelor de la 1 la 100 (inclusiv) folosind o buclă for peste interval (...), atribuiți-o la „total” și evaluați-o.
Afișează indiciu
range(1, 101) generează 1, 2, ..., 100 (exclusiv în dreapta).
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Având în vedere lista `words = ['uno', 'due', 'tre']`, construiți o listă de `perechi` de șiruri precum '0:uno', '1:due', '2:tre' folosind enumerate. Evaluează „perechi”.
Afișează indiciu
enumerate(words) returnează (index, valoare) la fiecare iterație.
Soluție disponibilă după 3 încercări
Provocare suplimentară
Calculate the sum of all even numbers from 2 to 20 inclusive using a `for` loop over a `range`. Store the final sum in `even_sum` and evaluate it.
Afișează indiciu
Utilizați intervalul (2, 21, 2) pentru a repeta numai pe numere întregi pare de la 2 la 20.
Soluție disponibilă după 3 încercări