Ciclo for vs ciclo while in Python: quando usare l'uno o l'altro

Entrambi i cicli ripetono del codice, quindi chi inizia si chiede spesso quale scegliere. La regola pratica: usa un ciclo for quando sai su cosa stai ciclando, e un ciclo while quando aspetti che qualcosa cambi. Ogni esempio qui sotto è stato eseguito e l'output mostrato è esatto.

for con range: un numero noto di volte

range(3) dà 0, 1 e 2. La variabile del ciclo prende ciascun valore a turno. La fine di range non è mai inclusa.

for i in range(3):
    print(i)

Output:

0
1
2

for su una lista: ogni elemento

Un ciclo for può scorrere direttamente una lista, una stringa, un dizionario o qualsiasi altra cosa che si possa attraversare un elemento alla volta. Non serve un indice.

for part in ["wrench", "cable"]:
    print(part)

Output:

wrench
cable

while: finché qualcosa non cambia

Un ciclo while controlla la sua condizione prima di ogni giro. Qualcosa dentro il ciclo deve cambiare quella condizione, altrimenti non finisce mai. Qui la batteria cala di 3 finché non ne resta abbastanza, e non conosci in anticipo il numero di giri.

battery = 10
steps = 0
while battery >= 3:
    battery -= 3
    steps += 1
print(steps)

Output:

3

break e continue

break esce subito dal ciclo. continue salta il resto di questo giro e passa al successivo. Funzionano sia nei cicli for sia in quelli while.

for n in range(1, 8):
    if n % 2 == 0:
        continue
    if n > 5:
        break
    print(n)

Output:

1
3
5

Il ciclo infinito

Un ciclo while la cui condizione non diventa mai falsa gira per sempre. Se il programma sembra bloccato, controlla che la variabile nella condizione cambi davvero dentro il ciclo. Su questo sito, un programma che gira per più di cinque secondi viene fermato per te.

Domande comuni

Ogni ciclo for si può scrivere come ciclo while?
Sì, ma è più lungo e più facile da sbagliare, perché gestisci tu il contatore. Preferisci for ogni volta che scorri una collezione o un intervallo fisso.
Qual è la differenza tra break e continue?
break termina l'intero ciclo. continue salta solo il giro corrente e prosegue con il successivo.
Perché il mio ciclo while non finisce mai?
La condizione resta vera perché nulla dentro il ciclo cambia la variabile che controlla. Aggiungi una riga che la avvicini alla fine, come n -= 1.

Esercitati