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".
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:
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.
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:
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
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
Calcola la somma dei numeri da 1 a 100 (inclusi) usando un ciclo for su range(...), assegnala a `total` e valutala.
Mostra suggerimento
range(1, 101) genera 1, 2, ..., 100 (esclusivo a destra).
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
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`.
Mostra suggerimento
enumerate(parole) restituisce (indice, valore) ad ogni iterazione.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
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.
Mostra suggerimento
Usa range(2, 21, 2) per iterare solo sui numeri pari da 2 a 20.
Soluzione disponibile dopo 3 tentativi