Passer au contenu principal
eLearner.app
Module 2 · Leçon 1 sur 45/36 dans le cours~10 min
Leçons du module (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

Exercice#python.m2.l1.e1
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Esercizio di ripasso

Exercice#python.m2.l1.e2
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Sfida aggiuntiva

Exercice#python.m2.l1.e3
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives