Benvenuto/a! In questa lezione impari ad usare ciclo for e funzione range in Python per iterare su intervalli, stringhe e liste in modo chiaro e “pitonico”. Lavoreremo con esempi pratici (💪 tabelline, ➕ somma da 1 a n) e vedremo utili estensioni come enumerate() e zip() per scrivere codice pulito e leggibile.
🔗 Ripassi consigliati:
• Lezione 2 – Il tuo primo script: Hello, Python! → https://www.saperesemplice.com/primo-script-python-hello/
• Lezione 3 – Variabili e Tipi di Dato → https://www.saperesemplice.com/variabili-tipi-dato-python/
• Guida installazione Python → https://www.saperesemplice.com/installazione-python-prime-basi/
• Percorso corsi Python → https://www.saperesemplice.com/corsi-informatica/corsi-di-informatica-python/
Dettagli lezione
⏱️ Tempo stimato: 30–40 minuti
🧩 Difficoltà: Facile
🎯 Obiettivi specifici
- Comprendere la sintassi del ciclo
forin Python e quando preferirlo awhile. - Usare
range(start, stop, step)per creare intervalli efficienti. - Iterare su stringhe e liste in modo “pitonico”, evitando contatori manuali inutili.
- Applicare
enumerate()(indice + valore) ezip()(iterazione parallela). - Risolvere gli esercizi tabelline e somma dei numeri da 1 a n.
🧠 Perché il for di Python è speciale
A differenza di altri linguaggi, il for di Python itera direttamente sugli elementi di una sequenza o qualunque iterabile (liste, stringhe, tuple, set, dizionari, file, generatori…). Non serve specificare contatore, condizione e incremento come in C.
# Itera direttamente sugli elementi
colors = ["red", "green", "blue"]
for c in colors:
print(c) # red, green, blue
📌 Concetto chiave: un iterabile fornisce i propri elementi uno alla volta; il
forsi occupa del “contatore” per te.
Domanda per te: in quali scenari preferisci iterare sugli elementi piuttosto che sugli indici?
🔢 La funzione range()
range() genera una sequenza di interi lazy (non crea subito una lista in memoria) utile per iterazioni numeriche.
# range(stop): 0, 1, 2, ..., stop-1
for i in range(5):
print(i)
# range(start, stop)
for i in range(2, 5):
print(i) # 2, 3, 4
# range(start, stop, step)
for i in range(10, 0, -2):
print(i) # 10, 8, 6, 4, 2
Note pratiche:
stopè escluso.steppuò essere negativo (conti alla rovescia).rangerestituisce un oggetto range efficiente; se ti serve una lista:list(range(5)).
💡 Usa
rangeper intervalli numerici; per liste/stringhe itera direttamente sugli elementi quando possibile.
Domanda per te: quando ti è utile creare range con step personalizzato (es. 2, 5, −1)?
🧵 Iterazione su stringhe
Una stringa è una sequenza: puoi percorrerla char per char.
text = "Python"
for ch in text:
print(ch)
Se ti serve anche l’indice:
for idx, ch in enumerate(text):
print(idx, ch)
✨ Suggerimento: usa
enumerate()invece di gestire un contatore a mano. È più leggibile e meno soggetto a errori.
📦 Iterazione su liste
Itera sugli elementi; prendi l’indice solo quando serve davvero.
nums = [10, 20, 30]
for n in nums:
print(n)
Indice + valore:
for i, n in enumerate(nums, start=1):
print(i, n) # 1 10 / 2 20 / 3 30
Iterazione parallela su due liste con zip():
names = ["Alice", "Bob", "Carol"]
scores = [88, 91, 79]
for name, score in zip(names, scores):
print(f"{name}: {score}")
🔍 Curiosità: su dizionari, usa
.items()per coppiechiave, valore.
🧮 Esempi pratici
1) Tabelline con for + range
n = 7
for i in range(1, 11):
print(f"{n} x {i} = {n*i}")
2) Somma dei numeri da 1 a n
n = 100
s = 0
for i in range(1, n + 1):
s += i
print("Sum from 1 to n:", s) # 5050 se n = 100
💡 Extra: la somma da 1 a n ha anche formula chiusa
n*(n+1)/2.
3) Iterare sulle lettere di una parola
word = "developer"
for ch in word:
if ch in "aeiou":
print("Vowel:", ch)
4) Contare elementi che soddisfano una condizione
nums = [3, 10, 15, 21, 22]
count = 0
for x in nums:
if x % 5 == 0:
count += 1
print("Multiples of 5:", count)
Domanda per te: come riscriveresti l’esempio 4 usando una list comprehension? (Anticipo della lezione sulle sequenze!)
✂️ Strumenti utili: enumerate() e zip()
enumerate(iterable, start=0) → ti dà coppie (indice, valore).
animals = ["cat", "dog", "fox"]
for i, a in enumerate(animals, start=1):
print(i, a)
zip(a, b, ...) → itera in parallelo più sequenze (si ferma alla più corta).
titles = ["Mr", "Ms", "Dr"]
names = ["Smith", "Taylor", "Lee", "Extra"]
for t, n in zip(titles, names):
print(t, n)
ℹ️ Non sono obbligatori per questa lezione, ma migliorano la leggibilità del tuo
for.
⚠️ Errore comune da evitare
Off‑by‑one con range (confondere estremi inclusi/esclusi) e uso superfluo dell’indice.
# ❌ stampa 10 volte ma volevi 9
for i in range(0, 10 + 1):
print(i)
# ✅ fermati a 9 (stop escluso)
for i in range(0, 10):
print(i)
Altro errore: iterare sugli indici quando bastano gli elementi.
# ❌ Meno leggibile
for i in range(len(nums)):
print(nums[i])
# ✅ Più pitonico
for x in nums:
print(x)
Domanda per te: in quale scenario l’indice è realmente necessario? (Es.: posizione per stampare un ranking.)
📖 Sezione teorica
- Ciclo
forin Python: itera sugli elementi di sequenze/iterabili. range(): genera intervalli numerici lazy —stopè escluso; usastart/stop/step.- Stringhe e liste sono sequenze: puoi iterarle direttamente; usa
enumerate()per indice/valore,zip()per camminare in parallelo. - Evita errori di off‑by‑one e contatori manuali non necessari.
📚 Glossario tecnico
- Iterabile: oggetto che può fornire i propri elementi uno alla volta in un
for. - Iteratore: oggetto con
__iter__()e__next__()che produce elementi. - Sequenza: collezione ordinata indicizzabile (es. stringhe, liste, tuple).
range: oggetto iterabile per progressioni aritmetiche.enumerate: wrapper che aggiunge un contatore all’iterazione.zip: aggrega più iterabili iterando in parallelo.
📝 Esercizio finale
Realizza un programma che, dato un intero n, stampi:
- La tabellina del 7 fino a
7*n. - La somma dei numeri da
1an. - Il numero di vocali presenti in una stringa
s.
Requisiti:
- Usa
forerangedove appropriato. - Stampa messaggi in inglese.
- Per il conteggio vocali, ignora maiuscole/minuscole.
Schema d’aiuto (esempio):
n = 10
s = "Programming"
# Your code here...
🧠 Quiz finale
Non guardare le risposte subito! Sono più sotto 👇
- Cosa produce
range(3)?
A)[0, 1, 2, 3]
B)0, 1, 2
C)1, 2, 3 - Cosa stampa?
for i in range(2, 7, 2):
print(i)
A) 2 3 4 5 6 7
B) 2 4 6
C) 3 5 7
- Qual è il modo più pitonico per iterare una lista
nums?
A)for i in range(len(nums)):
B)for n in nums:
C)while i < len(nums): - A cosa serve
enumerate()?
A) A creare intervalli numerici
B) A iterare in parallelo due liste
C) A ottenere indice e valore durante ilfor - Qual è l’errore nel codice?
for i in range(1, 10):
print(i)
print(i)
A) i non esiste fuori dal ciclo
B) Nessun errore: i vale 9 dopo il ciclo
C) Serve global i
- Come ottieni un conto alla rovescia da 5 a 1?
A)range(1, 6, -1)
B)range(5, 0, -1)
C)range(5, 1, -1) - Cosa fa
zip(a, b)?
A) Unisce due stringhe
B) Crea coppie di elementi in parallelo
C) Restituisce indici a partire da 1
❓ FAQ
1) Quando uso for vs while?
Usa for per iterazioni con numero noto di passi o su collezioni; while per cicli guidati da condizione (finché succede X).
2) range crea una lista?
No, ritorna un oggetto range che genera i numeri on‑demand (efficiente in memoria). Usa list(range(...)) se ti serve la lista.
3) Posso iterare un dizionario?
Sì: su chiavi (for k in d:), valori (for v in d.values()), o coppie (for k, v in d.items():).
4) Come evito off‑by‑one?
Ricorda che lo stop è escluso: verifica bene gli estremi e, se serve, aggiungi +1 al limite superiore.
5) È meglio usare range(len(seq))?
Solo quando ti serve l’indice. Altrimenti itera direttamente sugli elementi o usa enumerate().
🔗 Link utili
Esterni
• Python Tutorial – For statements (Control Flow)
• Python Library – Built‑in Functions (range, enumerate)
• Approfondimento didattico – For Loops in Python (Real Python)
Interni
• Lezione 2 – Primo script Python → https://www.saperesemplice.com/primo-script-python-hello/
• Lezione 3 – Variabili e Tipi di Dato → https://www.saperesemplice.com/variabili-tipi-dato-python/
• Guida installazione Python → https://www.saperesemplice.com/installazione-python-prime-basi/
• Percorso “Corsi Python – Programmare da zero” → https://www.saperesemplice.com/corsi-informatica/corsi-di-informatica-python/
🔁 Collegamento alla lezione successiva
➡️ Prosegui alla Lezione 10: Liste e tuple – sequenze in Python
(Il link verrà inserito non appena l’articolo sarà online.)
🗨️ Hai dubbi? Lascia un commento!
📩 Vuoi il PDF della lezione? Scrivici!
🔗 Condividi con un compagno di corso.
🧪 Risposte del quiz
- B
- B
- B
- C
- B
- B
- B
