Salta ai contenuti
Manuale LogoManuale Logo

Cicli for

Per salutare 100 studenti uno per uno senza un ciclo dovresti scrivere print("Ciao!") cento volte. Un ciclo esegue la stessa istruzione per ogni elemento.

Il ciclo for è adatto quando sai già cosa vuoi scorrere: una lista di nomi, le lettere di una parola o i numeri da 1 a 10.

for elemento in sequenza:
# codice da eseguire per ogni elemento

Ad ogni iterazione, elemento riceve il valore successivo della sequenza. Quando la sequenza termina, termina anche il ciclo.

L’uso più comune consiste nell’eseguire un’azione per ogni elemento di una lista.

frutta = ["mela", "banana", "ciliegia"]
for frutto in frutta:
print(frutto)

Output:

mela
banana
ciliegia

La variabile frutto (che hai scelto tu) prende il valore "mela" al primo giro, "banana" al secondo, "ciliegia" al terzo.

Una stringa è una sequenza di caratteri, quindi puoi visitare le lettere una alla volta:

for carattere in "Python":
print(carattere)

Output:

P
y
t
h
o
n

Per eseguire un’istruzione esattamente N volte, usa range():

for i in range(5):
print("Ciao!")

Il codice stampa “Ciao!” 5 volte. La variabile i assume i valori 0, 1, 2, 3 e 4.

Vedi la sezione su range() per tutti i dettagli su come usarla.

Se mentre scorri una lista ti servono sia il valore sia la posizione, usa enumerate():

frutta = ["mela", "banana", "ciliegia"]
for indice, frutto in enumerate(frutta):
print(f"{indice}: {frutto}")

Output:

0: mela
1: banana
2: ciliegia

Puoi anche scegliere da quale numero partire:

for numero, frutto in enumerate(frutta, start=1):
print(f"{numero}. {frutto}")

Output:

1. mela
2. banana
3. ciliegia

zip() abbina gli elementi di due liste nella stessa posizione:

nomi = ["Alice", "Bob", "Carlo"]
voti = [8, 7, 9]
for nome, voto in zip(nomi, voti):
print(f"{nome} ha preso {voto}")

Output:

Alice ha preso 8
Bob ha preso 7
Carlo ha preso 9

break ferma il ciclo immediatamente:

for i in range(10):
if i == 5:
break # quando i vale 5, esci dal ciclo
print(i)
# stampa: 0, 1, 2, 3, 4

continue salta questo giro e va al prossimo:

for i in range(10):
if i % 2 == 0:
continue # se il numero è pari, saltalo
print(i)
# stampa solo i numeri dispari: 1, 3, 5, 7, 9

Puoi inserire un ciclo for dentro un altro, per esempio per costruire una tabellina:

for i in range(1, 4):
for j in range(1, 4):
print(f"{i} x {j} = {i * j}")
print("---")

Output:

1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
...

I dizionari possono essere scorsi in modi diversi:

persona = {"nome": "Alice", "eta": 16, "citta": "Roma"}
# Solo le chiavi
for chiave in persona:
print(chiave) # nome, eta, citta
# Chiavi e valori insieme
for chiave, valore in persona.items():
print(f"{chiave}: {valore}")