Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Python] Interrompere ciclo esterno da ciclo interno

    Salve, mi sto dilettando a scrivere qualche programmino in Python, ma non sto riuscendo a fare interrompere un ciclo esterno quando una condizione interna lo richiede, in sostanza non trovo un equivalente delle label di Java per denominare i cicli.
    La situazione è qualcosa del genere:
    codice:
    for i in range(0, 3, 1):
        sede = input("Digita la citta: ")
        for citta in sedi:
            if sede == citta:
                # ok
                break # voglio chiudere il for esterno!
        else:
            print("Citta non presente")
    else:
        print("Spiacenti, nessuna città disponibile")

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    non esiste... o usi il try/catch creando una tua exception o assegni una variabile e poi se è settata interrompi il ciclo esterno: mi dispiace. Come per lo switch python non supporta (per volonta sua) alcune strutture come il goto.
    Logiqo.org gestionale per perizie infortunistiche.

  3. #3
    Ho trovato una soluzione: dopo il break al for interno, faccio un else al for interno con un continue, e poi un break al for esterno.
    Non ho capito molto la logica che c'è dietro ma funziona.

  4. #4

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    posta la soluzione, pls
    Ecco il codice completo. I tre tentativi possibili sono una mia scelta...
    codice:
    sedi = ["Torino", "Milano", "Padova", "Bologna", "Firenze", "Roma", "Napoli", "Bari", "Palermo", "Cagliari"]
    nome = input("Digita il tuo nome: ")
    cognome = input("Digita il tuo cognome: ")
    anno = int(input("Digita il tuo anno di nascita: "))
    if anno <= 2004 and anno >= 1994:
        for i in range(0, 3, 1):
            sede = input("Digita la citta' presso la quale vorresti seguire il corso: ")
            for citta in sedi:
                if sede == citta:
                    print("Benissimo", nome, cognome, end="")
                    print("!")
                    print("L'iscrizione al corso presso la sede di", sede, "e' avvenuta con successo!")
                    break #chiudo il for interno
            else:
                print("La citta' richiesta non e' una sede della nostra scuola")
                continue
            break # chiudo il for esterno
        else:
            print("Ci dispiace, non abbiamo sedi nelle citta' richieste")
    else:
        print("Anno di nascita non compatibile con l'iscrizione al corso")

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Il codice si potrebbe enormemente semplificare rifattorizzandolo con l'uso delle cosiddette Guard Clause.

    Così come è scritto, si capisce solo perché di lunghezza breve, ma all'aumentare delle condizioni da gestire - se ci saranno - diverrà presto illeggibile.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Probabile, io l'ho impostato sulla base di un analogo algoritmo in Java, per questo cercavo di introdurre delle label per fare break dal ciclo interno sul ciclo esterno.
    Grazie del link, svilupperò...

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.