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
whilein 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
breaksolo quando il ciclo ha davvero raggiunto il suo obiettivo. Evita uscite premature senza motivo: rendono il flusso difficile da seguire. - Usa
continueper filtrare dati in modo esplicito. È spesso più leggibile di annidare moltiifdentro il ciclo. - Con
while, assicurati che la condizione cambi sempre. Se la variabile di controllo non viene aggiornata, rischi un ciclo infinito. - Preferisci
forquando iteri su una sequenza nota ewhilequando la ripetizione dipende da una condizione dinamica. - Usa la clausola
elsenei 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:
continuesalta l’iterazione corrente;breakinterrompe il ciclo;elsenei cicli si esegue solo se non c’è statobreak;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
- Documentazione Python su
forewhile: https://docs.python.org/3/tutorial/controlflow.html - Documentazione Python su
break,continueeelsenei cicli: https://docs.python.org/3/reference/compound_stmts.html - PEP 8 - Style Guide for Python Code: https://peps.python.org/pep-0008/
