Passer au contenu principal
eLearner.app
Module 2 · Leçon 2 sur 46/36 dans le cours~8 min
Leçons du module (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

Exercice#python.m2.l2.e1
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Esercizio di ripasso

Exercice#python.m2.l2.e2
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Sfida aggiuntiva

Exercice#python.m2.l2.e3
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives