Vai al contenuto
eLearner.app
Modulo 2 · Lezione 2 di 46/36 nel corso~8 min
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

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

Il 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:

Code
i = 0
while i < 5:
    print(i)
    i = i + 1

Loop infinito + condizione di uscita interna — utile quando la condizione si valuta dopo aver fatto qualcosa:

Python
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:

Python
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

Esercizio#python.m2.l2.e1
Tentativi: 0Caricamento…

Trova il più piccolo intero `n >= 1` tale che 2**n superi un milione. Assegnalo a `result` e valutalo (deve essere 20).

Caricamento editor…
Mostra suggerimento

2**20 = 1.048.576 è il primo a superare 1.000.000.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#python.m2.l2.e2
Tentativi: 0Caricamento…

Partendo da `n = 1000`, dimezza n con divisione intera (n // 2) finché diventa 0. Conta quante iterazioni servono in `steps`. Valuta `steps`.

Caricamento editor…
Mostra suggerimento

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: dieci passi.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#python.m2.l2.e3
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

La condizione del while è n > 1. All'interno dividi n per 2 e incrementa divisions di 1.

Soluzione disponibile dopo 3 tentativi