Saltar al contenido principal
eLearner.app
Módulo 2 · Lección 1 de 45/36 en el curso~10 min
Lecciones del módulo (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

Ejercicio#python.m2.l1.e1
Intentos: 0Cargando...

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

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Esercizio di ripasso

Ejercicio#python.m2.l1.e2
Intentos: 0Cargando...

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

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Sfida aggiuntiva

Ejercicio#python.m2.l1.e3
Intentos: 0Cargando...

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.

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos