Vai al contenuto
eLearner.app
Modulo 2 · Lezione 1 di 45/36 nel corso~10 min
Lezioni del modulo (1/4)

Cicli for e range

Il ciclo for in Python serve a iterare su una sequenza di elementi: una lista, una stringa, un range, un dict… qualsiasi cosa che sia "iterabile".

Python
parole = ["ciao", "mondo", "!"]
for p in parole:
    print(p)
# ciao
# mondo
# !

Lo schema è sempre lo stesso: for <variabile> in <iterabile>: seguito dal blocco indentato che verrà eseguito una volta per ogni elemento.

range(...): generare intervalli di interi

range produce una sequenza pigra di numeri interi. Tre 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     (step negativo)

range è esclusivo sull'estremo destro, come slice. È un'oggetto pigro: non occupa memoria per tutti i numeri, li produce uno alla volta.

Python
totale = 0
for i in range(1, 11):
    totale = totale + i
totale  # 55  (1+2+...+10)

Iterare con indice: enumerate

Quando ti serve insieme l'elemento e il suo indice, usa enumerate:

Python
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
    print(i, p)
# 0 ciao
# 1 mondo
# 2 !

enumerate produce coppie (indice, valore) che assegniamo direttamente a due variabili con il tuple unpacking (lo vedremo nel modulo dedicato alle strutture dati).

Iterare due sequenze in parallelo: zip

Python
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
    print(f"{n} ha {a} anni")

zip si ferma alla sequenza più corta.

range() e la pigrizia di Python

In Python, la funzione range() non crea una vera lista in memoria: crea un generatore lazy che produce i numeri uno alla volta solo quando richiesto (ad esempio in un ciclo for). Questo consente di iterare su milioni di elementi senza consumare RAM. Per visualizzare gli elementi di un range come lista, puoi convertirlo esplicitamente usando list(range(5)).

Prova tu

Esercizio#python.m2.l1.e1
Tentativi: 0Caricamento…

Calcola la somma dei numeri da 1 a 100 (inclusi) usando un ciclo for su range(...), assegnala a `total` e valutala.

Caricamento editor…
Mostra suggerimento

range(1, 101) genera 1, 2, ..., 100 (esclusivo a destra).

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#python.m2.l1.e2
Tentativi: 0Caricamento…

Data la lista `words = ['uno', 'due', 'tre']`, costruisci una lista `pairs` di stringhe del tipo '0:uno', '1:due', '2:tre' usando enumerate. Valuta `pairs`.

Caricamento editor…
Mostra suggerimento

enumerate(parole) restituisce (indice, valore) ad ogni iterazione.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#python.m2.l1.e3
Tentativi: 0Caricamento…

Calcola la somma di tutti i numeri pari da 2 a 20 compresi usando un ciclo `for` su un `range`. Salva la somma finale in `even_sum` e valutala.

Caricamento editor…
Mostra suggerimento

Usa range(2, 21, 2) per iterare solo sui numeri pari da 2 a 20.

Soluzione disponibile dopo 3 tentativi