Lezioni del modulo (2/4)
Cicli while
Il ciclo while ripete un blocco finché una condizione resta vera. Usa
while quando non conosci a priori quante iterazioni serviranno: il numero di
giri dipende da qualcosa che cambia dentro il loop.
Sintassi
n = 1
while n < 1000:
n = n * 2
n # 1024Il blocco indentato viene eseguito ripetutamente. Prima di ogni iterazione Python valuta la condizione: appena diventa falsa, il loop termina e l'esecuzione prosegue dopo il blocco.
Pattern comuni
Contatore manuale — equivalente di un for classico in altri linguaggi:
i = 0
while i < 5:
print(i)
i = i + 1Loop infinito + condizione di uscita interna — utile quando la condizione si valuta dopo aver fatto qualcosa:
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 è il primo quadrato > 100)break esce immediatamente dal loop più interno (lo vedremo nella prossima
lezione).
L'errore classico: il loop infinito
Se la variabile della condizione non cambia dentro il loop, il programma
non termina mai. È l'errore numero uno con while:
n = 0
while n < 10:
print(n) # n non viene mai modificato → loop infinito!Nei nostri esercizi c'è un timeout di esecuzione, quindi un loop infinito fallirà con un messaggio chiaro invece di bloccare il browser. Ma in produzione un loop infinito è un bug serio.
Pericolo cicli infiniti e condizioni di uscita
Un ciclo while continua finché la condizione è vera. Se dimentichi di aggiornare le variabili coinvolte nella condizione all'interno del blocco, il ciclo andrà avanti all'infinito, bloccando l'applicazione. Assicurati sempre che il corpo del ciclo compia un progresso verso la condizione di terminazione.
Prova tu
Trova il più piccolo intero `n >= 1` tale che 2**n superi un milione. Assegnalo a `result` e valutalo (deve essere 20).
Mostra suggerimento
2**20 = 1.048.576 è il primo a superare 1.000.000.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Partendo da `n = 1000`, dimezza n con divisione intera (n // 2) finché diventa 0. Conta quante iterazioni servono in `steps`. Valuta `steps`.
Mostra suggerimento
1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: dieci passi.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Data la variabile `n = 32`, usa un ciclo `while` per contare quante volte puoi dividere `n` per 2 (usando divisione intera `//`) prima che `n` diventi minore o uguale a 1. Salva il contatore in `divisions` e valutalo.
Mostra suggerimento
La condizione del while è n > 1. All'interno dividi n per 2 e incrementa divisions di 1.
Soluzione disponibile dopo 3 tentativi