Saltar al contenido principal
eLearner.app
Módulo 2 · Lección 2 de 46/36 en el curso~8 min
Lecciones del módulo (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:

Python
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

Ejercicio#python.m2.l2.e1
Intentos: 0Cargando...

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

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Esercizio di ripasso

Ejercicio#python.m2.l2.e2
Intentos: 0Cargando...

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

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Sfida aggiuntiva

Ejercicio#python.m2.l2.e3
Intentos: 0Cargando...

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.

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos