Vai al contenuto
eLearner.app
Modulo 2 · Lezione 3 di 47/36 nel corso~10 min
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:

  • breakesce immediatamente dal loop.
  • continuesalta il resto del corpo e passa all'iterazione successiva.
  • else (sul loop) — eseguito quando il loop termina senza un break.

break

Python
for n in [3, 7, 11, 4, 9]:
    if n % 2 == 0:
        primo_pari = n
        break
primo_pari  # 4

break ferma il loop il prima possibile. Tutto ciò che viene dopo break nel corpo dell'iterazione corrente NON viene eseguito.

continue

Python
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:

Python
target = 7
for n in [2, 4, 6, 8]:
    if n == target:
        trovato = True
        break
else:
    trovato = False
trovato  # False

Si 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

Python
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

Esercizio#python.m2.l3.e1
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

35 è il primo (e unico) divisibile per 7 nella lista.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#python.m2.l3.e2
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

Se n è pari, continue; altrimenti append.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#python.m2.l3.e3
Tentativi: 0Caricamento…

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`.

Caricamento editor…
Mostra suggerimento

All'interno del ciclo if num % 7 == 0 and num > 10: assegna a found e chiama break.

Soluzione disponibile dopo 3 tentativi