Menu

Ciclo while in Python: sintassi, while True ed evitare i cicli infiniti

Quando scegliere un ciclo while invece di un for, come evitare i cicli infiniti e i pattern che compaiono più spesso nel codice reale.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Un ciclo che osserva una condizione

Mentre for itera su una sequenza nota, while continua a ripetere finché una condizione è vera. Lo usi quando non sai in anticipo quante iterazioni ti serviranno: riprovare finché qualcosa non funziona, leggere l'input finché l'utente non dice basta, interrogare un servizio finché non risponde.

La forma è semplice:

Questo stampa i numeri da 0 a 4. Python controlla la condizione all'inizio di ogni iterazione. Se è vera, il corpo viene eseguito. Poi la controlla di nuovo. Quando la condizione diventa falsa, il ciclo termina.

Nota che count += 1 è fondamentale. Senza, la condizione resterebbe vera per sempre: un ciclo infinito. È la trappola principale di while, e il motivo principale per preferire for quando puoi usarlo.

Quando while è lo strumento giusto

Alcuni casi d'uso classici:

Riprovare fino al successo.

Leggere l'input finché l'utente non esce.

Elaborare una coda.

Il filo conduttore: stai aspettando un cambiamento di stato invece di iterare sugli elementi.

while True va benissimo

Vedrai spesso questo pattern:

È Python idiomatico quando la condizione di uscita "vera" si trova dentro il corpo del ciclo, e non è qualcosa di pulito che puoi verificare all'inizio. È più facile da leggere che inventarsi un flag should_continue che aggiorni in un punto e controlli in un altro.

L'unica regola: assicurati che ci sia un break (o un return, o un'eccezione sollevata) che il codice prima o poi raggiungerà. Un while True: incondizionato senza via d'uscita è il modo classico per bloccare un programma.

Evitare il ciclo infinito

I cicli infiniti si verificano quando la condizione resta vera per sempre. I soliti sospetti:

  • Hai dimenticato di aggiornare la variabile. while count < 5: ha bisogno di qualcosa nel corpo che modifichi count.
  • Hai aggiornato la variabile sbagliata. while i < 10: e poi j += 1 all'interno: facile da non notare se il tuo codice ha più di qualche variabile.
  • Confronto tra numeri in virgola mobile. while x != 1.0: può girare all'infinito se x si avvicina soltanto a 1.0. Usa invece <= oppure abs(x - 1.0) < tolerance.

Se resti bloccato in un ciclo infinito in un terminale, premi Ctrl+C. Questo invia un segnale di interruzione e Python ferma qualunque cosa stia facendo.

break, continue ed else

while supporta gli stessi tre strumenti di "flusso" di for:

  • break esce subito dal ciclo.
  • continue passa all'iterazione successiva (quindi la condizione viene controllata di nuovo).
  • else viene eseguito se il ciclo è terminato senza un break.

È un semplice controllo di primalità. Se scatta il break interno, il numero è composto. Se il ciclo esce in modo naturale (la condizione diventa falsa), viene eseguito l'else, che dichiara il numero primo.

while o for: quale scegliere?

Un rapido test mentale:

  • Hai una collezione da scorrere? → for.
  • Devi ripetere un numero fisso di volte? → for i in range(n):.
  • Stai ripetendo finché una condizione non cambia? → while.

Nel codice Python dei primi tempi scoprirai che for copre il 90% dei cicli. while compare quando fai cose come polling, nuovi tentativi o la costruzione di un semplice REPL. Se usi while per scorrere una lista con un indice, è il segnale che dovresti passare a for + enumerate.

Un programma pratico con while

Un gioco in cui indovinare un numero è un esempio classico, perché il numero di iterazioni dipende da come gioca l'utente:

Non puoi sapere in anticipo quanti tentativi serviranno: dipende dalle risposte dell'utente. È proprio la ragione d'essere di while.

Cosa viene dopo

Ora conosci i due tipi di ciclo che Python ti mette a disposizione. Prossimo passo: range() nel dettaglio. Compare in quasi ogni ciclo for che conta, e vale la pena capirne le piccole sfumature prima di passare alle collezioni.

Domande frequenti

Quando conviene usare un ciclo while invece di un ciclo for?

Usa while quando non sai in anticipo quante iterazioni ti servono: per esempio, per riprovare finché qualcosa non riesce, o per leggere l'input finché l'utente non scrive 'quit'. Usa for quando scorri una collezione nota.

Come evito un ciclo infinito in Python?

Assicurati che qualcosa dentro il ciclo, prima o poi, renda falsa la condizione. La causa più comune dei cicli infiniti è dimenticarsi di aggiornare la variabile da cui dipende la condizione. Se ci finisci dentro, premi Ctrl+C nel terminale per fermarlo.

Usare while True è una cattiva pratica?

Non di per sé. while True: con un break chiaro al suo interno è un pattern del tutto normale per "ripeti finché non incontriamo una condizione di uscita precisa". È più pulito che inventarsi un flag booleano da gestire in due punti diversi.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA