Lezioni del modulo (3/4)
break, continue ed else nei cicli
Dentro un ciclo (sia for che while) puoi alterare il flusso normale con
tre costrutti:
break— esce immediatamente dal loop.continue— salta il resto del corpo e passa all'iterazione successiva.else(sul loop) — eseguito quando il loop termina senza unbreak.
break
for n in [3, 7, 11, 4, 9]:
if n % 2 == 0:
primo_pari = n
break
primo_pari # 4break ferma il loop il prima possibile. Tutto ciò che viene dopo break
nel corpo dell'iterazione corrente NON viene eseguito.
continue
risultati = []
for n in range(1, 11):
if n % 2 == 0:
continue # salta i pari
risultati.append(n * n)
risultati # [1, 9, 25, 49, 81]Pensa a continue come "vai alla prossima iterazione". Si usa per filtrare
elementi senza un livello di indentazione in più.
else sul loop (idiom Pythonico)
Una particolarità di Python: anche i loop possono avere un else, eseguito
solo se il loop è terminato naturalmente (senza break). È perfetto per
le ricerche:
target = 7
for n in [2, 4, 6, 8]:
if n == target:
trovato = True
break
else:
trovato = False
trovato # FalseSi legge: "per ogni n nella lista; se entri nel ramo break, salta l'else;
altrimenti esegui l'else".
Loop annidati: break esce dal più interno
for x in range(3):
for y in range(3):
if x == y == 1:
break
print(x, y)break esce solo dal for y, non dal for x. Per uscire da entrambi devi
usare una flag o una funzione + return.
L'insolito costrutto while...else
In Python, i cicli for e while possono avere una clausola else. Il codice nel blocco else viene eseguito solo se il ciclo termina naturalmente (senza incontrare un break). Questo è estremamente utile per implementare algoritmi di ricerca (es. "cerca un elemento: se lo trovi fai break, altrimenti esegui il blocco else per segnalare che non è stato trovato").
Prova tu
Data la lista `numbers = [10, 15, 20, 25, 30, 35]`, trova il primo numero divisibile per 7 e assegnalo a `result`. Se non esiste, assegna -1.
Mostra suggerimento
35 è il primo (e unico) divisibile per 7 nella lista.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Costruisci la lista `odd_numbers` con i numeri dispari da 1 a 20 (inclusi) usando un for su range(1, 21) e continue per saltare i pari.
Mostra suggerimento
Se n è pari, continue; altrimenti append.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Dato l'elenco di numeri `numbers = [7, 11, 14, 21, 25]`, scrivi un ciclo `for` per trovare il primo numero che sia divisibile per 7 ed anche strettamente maggiore di 10. Quando lo trovi, salvalo in `found` e interrompi il ciclo con `break`. Valuta infine `found`.
Mostra suggerimento
All'interno del ciclo if num % 7 == 0 and num > 10: assegna a found e chiama break.
Soluzione disponibile dopo 3 tentativi