Salt la conținutul principal
Modulul 2 · Lecția 1 din 45/36 în curs~10 min
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”.

Python
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:

Python
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.

Python
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:

Python
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

Python
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

Exercițiu#python.m2.l1.e1
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
Afișează indiciu

range(1, 101) generează 1, 2, ..., 100 (exclusiv în dreapta).

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m2.l1.e2
Încercări: 0Se încarcă…

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”.

Se încarcă editorul...
Afișează indiciu

enumerate(words) returnează (index, valoare) la fiecare iterație.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m2.l1.e3
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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