Cicli for e while in Python: interrompere, continuare e controllare il flusso

by theArchitect
SHARE
Cicli for e while in Python: interrompere, continuare e controllare il flusso
© Guida-HTML5.it

Introduzione

I cicli for e while sono tra gli strumenti più utili in Python per ripetere operazioni, ma il loro vero potenziale emerge quando impari a controllarne il flusso. In molti programmi reali non basta iterare su una lista o contare fino a un numero: spesso devi saltare elementi non validi, interrompere un ciclo in anticipo quando trovi il risultato desiderato, oppure gestire condizioni dinamiche che cambiano durante l’esecuzione.

In questo tutorial vedremo un sotto-argomento molto pratico: l’uso di break, continue e della clausola else nei cicli. È un tema utile perché compare spesso in script di automazione, validazione dati, ricerca in collezioni e logica di controllo nei programmi interattivi.

Imparerai a:

  • interrompere un ciclo quando hai già trovato ciò che ti serve;
  • saltare gli elementi che non rispettano una condizione;
  • usare while in modo sicuro evitando cicli infiniti;
  • scrivere codice più leggibile e robusto.

Codice completo

# Esempio pratico: analisi di una lista di transazioni
# Obiettivo:
# - ignorare importi non validi
# - fermarsi quando troviamo una transazione sopra una soglia
# - usare anche un ciclo while per simulare un controllo ripetuto

transazioni = [120, 85, -10, 40, 200, 60, 15]
soglia = 150

print("Analisi transazioni con for, continue, break ed else")

for importo in transazioni:
    # Salta i valori non validi
    if importo <= 0:
        print(f"Valore non valido ignorato: {importo}")
        continue

    print(f"Controllo transazione: {importo}")

    # Se troviamo una transazione sopra soglia, ci fermiamo
    if importo > soglia:
        print(f"Trovata transazione importante: {importo}")
        break
else:
    # Questo blocco viene eseguito solo se il ciclo termina senza break
    print("Nessuna transazione sopra soglia trovata.")

print("nEsempio con while: tentativi di accesso")

tentativi = 3
password_corretta = "python123"
password_inserita = ""

while tentativi > 0:
    password_inserita = input("Inserisci la password: ")

    if password_inserita == password_corretta:
        print("Accesso consentito.")
        break

    tentativi -= 1
    print(f"Password errata. Tentativi rimasti: {tentativi}")

else:
    # Viene eseguito solo se il while finisce perché tentativi arriva a 0
    print("Accesso negato: troppi tentativi falliti.")

print("nEsempio con while e controllo esplicito di validità")

numero = 1
somma = 0

while numero <= 10:
    # Salta i numeri pari
    if numero % 2 == 0:
        numero += 1
        continue

    somma += numero
    print(f"Aggiunto {numero}, somma attuale = {somma}")
    numero += 1

print(f"Somma dei numeri dispari da 1 a 10: {somma}")

Spiegazione

Vediamo il codice pezzo per pezzo. La prima parte usa un ciclo for per analizzare una lista di transazioni. Questo è un caso tipico: hai una sequenza di dati e vuoi esaminarla elemento per elemento.

continue: saltare un elemento e passare al successivo

Nell’esempio, se un importo è minore o uguale a zero, viene considerato non valido:

if importo <= 0:
    print(f"Valore non valido ignorato: {importo}")
    continue

La parola chiave continue interrompe l’iterazione corrente e fa ripartire subito il ciclo con l’elemento successivo. È molto utile quando vuoi ignorare dati sporchi, record incompleti o elementi che non ti interessano.

break: uscire dal ciclo quando hai finito

Se troviamo una transazione sopra la soglia, non serve continuare a controllare tutto il resto:

if importo > soglia:
    print(f"Trovata transazione importante: {importo}")
    break

Qui break interrompe il ciclo immediatamente. Questo migliora l’efficienza e rende il codice più chiaro quando la ricerca ha un obiettivo preciso, come trovare il primo elemento che soddisfa una condizione.

else nei cicli: un dettaglio poco noto ma molto utile

Il blocco else associato a un ciclo viene eseguito solo se il ciclo termina senza incontrare un break. In pratica, ti permette di distinguere due casi:

  • hai trovato qualcosa e ti sei fermato prima;
  • hai controllato tutto senza trovare nulla.

Nel nostro esempio:

for importo in transazioni:
    ...
else:
    print("Nessuna transazione sopra soglia trovata.")

Questo è molto elegante perché evita di usare variabili booleane inutili come trovato = False in molti casi semplici.

while: ripetere finché una condizione è vera

Nel secondo esempio usiamo un ciclo while per simulare un sistema di accesso con tre tentativi. Il ciclo continua finché tentativi > 0.

La logica è questa:

  • se la password è corretta, esci con break;
  • se la password è sbagliata, diminuisci i tentativi;
  • quando i tentativi arrivano a zero, il ciclo termina;
  • se il ciclo termina senza break, viene eseguito l’else.

Questo schema è molto comune nei menu interattivi, nei sistemi di login semplificati e nei processi che devono ripetere un’operazione finché non arriva un input valido.

Uso di continue in un ciclo while

Nell’ultimo esempio sommiamo i numeri dispari da 1 a 10. Se il numero è pari, lo saltiamo:

if numero % 2 == 0:
    numero += 1
    continue

Qui è importante notare una best practice fondamentale: aggiornare sempre la variabile di controllo prima di fare continue. Se dimenticassi numero += 1, il ciclo resterebbe bloccato sullo stesso valore, creando un ciclo infinito.

Best practice

  • Usa break solo quando il ciclo ha davvero raggiunto il suo obiettivo. Evita uscite premature senza motivo: rendono il flusso difficile da seguire.
  • Usa continue per filtrare dati in modo esplicito. È spesso più leggibile di annidare molti if dentro il ciclo.
  • Con while, assicurati che la condizione cambi sempre. Se la variabile di controllo non viene aggiornata, rischi un ciclo infinito.
  • Preferisci for quando iteri su una sequenza nota e while quando la ripetizione dipende da una condizione dinamica.
  • Usa la clausola else nei cicli solo quando migliora la chiarezza. È potente, ma va usata con criterio per non confondere chi legge il codice.
  • Commenta la logica di uscita quando il ciclo ha regole non banali: aiuta molto nella manutenzione del codice.

Riepilogo

In questo tutorial hai visto un aspetto molto pratico dei cicli in Python: il controllo del flusso con break, continue e else. Questi strumenti ti permettono di scrivere cicli più efficienti, leggibili e vicini ai casi reali di sviluppo.

In sintesi:

  • continue salta l’iterazione corrente;
  • break interrompe il ciclo;
  • else nei cicli si esegue solo se non c’è stato break;
  • for è perfetto per iterare su dati già disponibili;
  • while è ideale quando la ripetizione dipende da una condizione che può cambiare nel tempo.

Se impari a usare bene questi costrutti, potrai gestire con più sicurezza validazione dati, ricerca, automazione e interazione con l’utente.

Approfondisci con risorse ufficiali

SHARE