Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Break per cicli annidati

A
Andrea.D'Archivio (270 points)
3 4 5
in Programmare in Python by (270 points)
recategorized by
Volevo sapere, se è possibile, come uscire bruscamente da più cicli annidati con i break.
760 views
closed

2 Answers

Best answer
E
Edward (25950 points)
4 4 172
by (26.0k points)
selected by
Se alla fine di un ciclo metti un else, quel codice verrà eseguito solamente se il ciclo termina senza un break, quindi potresti fare una cosa del genere

for:
    for:
        for:
            if condizione:
                break
        else:
            continue
        break #se il for viene interrotto, non fa continue, quindi avviene il break
    else:
        continue
    break #se il for viene interrotto, non fa continue, quindi avviene il break

in questo modo se la condizione si verifica nel 3° for, tutti i for terminerebbero.

Come parere personale, secondo me il codice diventa poco leggibile, sarebbe meglio realizzare una funzione e fare un return.
A
Andrea.D'Archivio (270 points)
3 4 5
by (270 points)
guarda io sto diciamo cosi:

while:

    for:

       for:

            for:

                 if:

                   se la condizione è soddisfatta dovrei uscire da tutti questi cicli.

ovviamente ci sta altro codice tra un for e l'altro, ma non penso sia influente per la risposta.
E
Edward (25950 points)
4 4 172
by (26.0k points)
Se segui lo schema che ti ho mandato dovrebbe funzionare, semplicemente metti un else: continue alla fine di ogni for, e dopo metti un break. In quel modo se il for non viene interrotto, il break non viene eseguito. Altrimenti se viene interrotto, vengono interrotti anche gli altri perchè non viene eseguito il continue
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
edited by

In linea di massima quella del break non è mai la soluzione ottimale e si può riformulare cambiando il modo in cui hai impostato le condizioni e i loop (while/for), comunque in Python non credo esista esattamente quello che cerchi (una sorta di break outer per capirci). Probabilmente puoi risolvere con degli else posizionati correttamente, ma comunque ti consiglio di provare a rivedere come hai impostato la logica.

In ogni caso se non arrivi ad una soluzione puoi provare anche qualcosa con dei booleani, del tipo:

breakOuter = False
for:
    for:
        if condizione:
            breakOuter = True
            break
    if breakOuter :
        break