Problème avec le break

Résolu
dazdingue -  
 dazdingue -
Bonjour, moi aussi j'ai un problème avec mon programme avec le break (c'est un programme visant à créer un répertoire téléphonique, j'ai un niveau de 1ère en NSI)
Le voici :

def menu ():
       choix = input("0-quitter\n1-écrire dans le répertoire\n2-rechercher dans le 
       répertoire\nVotre choix ?")                                                                                                                                                     
       return choix

choix = input("0-quitter\n1-écrire dans le répertoire\n2-rechercher dans le répertoire\n\nVotre choix ?") 
with open('fichier.txt', 'a') as f:
       f.write(choix)

choix = int(choix)

While True: 
    nombre = input("Votre choix")
    nombre = int(nombre)

if choix == 0:
    print("Vous avez quitté cette page")
    break
else:
    continue

if choix == 1:
    print("Nom (0 pour terminer): \nTéléphone: ")
#insérer le programme de saisie
    break
else:
    continue

if choix == 2:
    print("Entrez un nom : \nLe numéro recherché est : ")
#insérer le programme de recherche
    break
else:
    continue


Merci à ceux qui pourraient m'aider, je rappelle, l'erreur étant 'break' outside loop

18 réponses

Résumé de la discussion

Un problème survient avec un programme Python destiné à gérer un répertoire téléphonique, lié à l'emploi du break en dehors d'une boucle et à la gestion des choix. Le souci s'explique par une organisation du code où le break est atteint hors d'une boucle et par une saisie du choix en dehors du bloc itératif, déclenchant l'erreur. Des conseils préconisent de lire le choix à l'intérieur d'une boucle while, d'utiliser des blocs conditionnels distincts et d'éviter la duplication de code pour que break interrompe correctement la boucle. En cas de correction, restructurer le flux en plaçant la saisie et les actions dans la même boucle, vérifier l'entrée avant conversion et assurer que break reste à l'intérieur d'une boucle unique.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Utilisateur anonyme
     
    Tu n'as pas bien lu le tuto,

    voila l'aspect que cela doit avoir
    def menu ():
           choix = input("0-quitter\n1-écrire dans le répertoire\n2-rechercher dans le 
           répertoire\nVotre choix ?")                                                                                                                                                     
           return choix
    
    choix = input("0-quitter\n1-écrire dans le répertoire\n2-rechercher dans le répertoire\n\nVotre choix ?") 
    with open('fichier.txt', 'a') as f:
           f.write(choix)
    
    choix = int(choix)
    
    While True: 
        nombre = input("Votre choix")
        nombre = int(nombre)
    
    if choix == 0:
        print("Vous avez quitté cette page")
        break
    else:
        continue
    
    if choix == 1:
        print("Nom (0 pour terminer): \nTéléphone: ")
    #insérer le programme de saisie
        break
    else:
        continue
    
    if choix == 2:
        print("Entrez un nom : \nLe numéro recherché est : ")
    #insérer le programme de recherche
        break
    else:
        continue

    0
    1. dazdingue
       
      c'est effectivement ce que j'avais sur le "prévisualiser" pourquoi me l'a-t-il modifié ?
      0
      1. Utilisateur anonyme > dazdingue
         
        parce que tu n'as pas bien lu le tuto..... et donc pas appliqué comme il faut
        0
      2. dazdingue > Utilisateur anonyme
         
        ah oui peut-être '^^ toutes mes excuses
        0
  2. Utilisateur anonyme
     
    L'indentation est primordiale en python, un bloc de code s'arrête quand l'indentation diminue.

    Donc une boucle while (avec w minuscule) commence à la ligne suivante avec une indentation supérieure et s'arrête juste avant la première ligne dont l'indentation est inférieure ou égale au mot clé while.

    Ton message d'erreur dit que le mot clé break n'est pas dans une boucle

    Focalisons nous sur
    while True: 
        nombre = input("Votre choix")
        nombre = int(nombre)
    
    if choix == 0:
        print("Vous avez quitté cette page")
        break
    else:
        continue


    Vois tu d'où viens le problème?
    0
    1. dazdingue
       
      ohh oui je vois ! il faudrait que je mette à partir de "if" tout le bloc indenté à While, c'est ça ?
      0
  3. Utilisateur anonyme
     
    oui.
    Poste, le bloc while corrigé et on verra les autres problèmes
    0
    1. dazdingue
       
      c'est fait, j'espère que c'est correct
      0
  4. Utilisateur anonyme
     
    C'est fait?
    je ne vois pas ton nouveau code
    0
    1. dazdingue
       
      il a été supprimé par un modérateur :(
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Ha oui, si tu ouvres 50 discussions, y’a un moment où tu va te faire rappeler à l’ordre.

    C’est dans cette discussion qu’il faut le poster
    0
    1. dazdingue
       
      ah bon ?
      0
  7. Utilisateur anonyme
     
    tu sais comment ça s'appelle un gosse qui vient chercher de l'aide et se moque de ceux qui l'aide:

    Un connard, et un connard on ne l'aide pas.

    Adieu
    0
    1. dazdingue
       
      Donc peux-tu m'expliquer en quoi je me suis moqué de l'aide que vous m'apportez ?
      Peut-être l'ai-je fais mais sans m'en rendre compte, auquel cas veux-tu bien m'excuser ?
      0
      1. Utilisateur anonyme > dazdingue
         
        ha bon?
        oui oui je l'ai lu, mais.... => (ça ne me concerne pas ou je m'en fous...) par 2 fois

        Si tu veux du respect, faut commencer par en montrer et l'insolence c'est tout le contraire

        Un autre bon point serait de tenir compte de ce qu'on te demande/dit

        Je cite
        boucle while (avec w minuscule)


        Poste le bloc while corrigé
        0
      2. dazdingue > Utilisateur anonyme
         
        donc alors repartons de zéro, tu veux bien ? s'il te plaît ?
        0
  8. dazdingue
     
    while True: 
        nombre = input("Votre choix")
        nombre = int(nombre)
    
        if choix == 0:
            print("Vous avez quitté cette page")
            break
        else:
            continue
    
        if choix == 1:
            print("Nom (0 pour terminer): \nTéléphone: ")
        #insérer le programme de saisie
            break
        else:
            continue
    
        if choix == 2:
            print("Entrez un nom : \nLe numéro recherché est : ")
        #insérer le programme de recherche
            break
        else:
            continue
    0
    1. dazdingue
       
      est-ce bon cette fois ?
      0
  9. Utilisateur anonyme
     
    OK,

    tu ouvres un projet neuf, tu y mets ce code et tu le lances.
    0
    1. dazdingue
       
      ok je te dit ce que ça me donne :)
      0
    2. dazdingue
       
      Alors du coup il me donne plus d'erreur, c'est déjà ça, merci :)
      Mais en revanche, le programme fait n'importe quoi
      a droite, le script et à gauche la console... par exemple, pour le 0, il me demande plusieurs fois...et pour le 1, je peux rentrer le choix à l'infini, il ne s'arrête pas

      0
  10. Utilisateur anonyme
     
    Je t'ai de ne mettre que la boucle while dans un programme neuf.....

    0
    1. dazdingue
       
      et du coup bah ça marche j'ai plus d'erreur, j'ai juste comme quoi choix n'est pas défini mais c'est logique
      0
  11. Utilisateur anonyme
     
    Tu demandes de remplir la variable nombre et tu testes la valeur de choix, tu trouves que c'est logique?

    Vraiment?
    0
    1. dazdingue
       
      c'est vrai qu'en regardant de plus près, honnêtement je sens qu'il y a un truc qui va pas mais je serais incapable de dire quoi exactement
      0
  12. Utilisateur anonyme
     
    Le truc qui ne va pas c'est que tu ne lis pas ce qu'on te dit
    0
    1. dazdingue
       
      ou alors que je comprends mal, nuance, mais euu...? peux-tu éclaircir un peu plus s'il te plait ?
      0
  13. Utilisateur anonyme
     
    Je peux difficilement être plus clair
    Tu demandes de remplir la variable nombre et tu testes la valeur de choix,

    0
    1. dazdingue
       
      oui non ca j'avais compris, c'est moi qui me suis mal exprimé, je voulais plutôt dire je ne vois pas comment changer ca
      0
  14. Utilisateur anonyme
     
    Option 1 tu demandes de remplir la variable nombre et tu testes le contenu de la variable nombre
    Option 2 tu demandes de remplir la variable choix et tu testes le contenu de la variable choix.

    Je pensais franchement pas qu'on allait passer 8 messages sur 2 variables au d'une

    Désolé de te le dire mais, si tu veux résoudre la 3eme erreur qui est plus compliquée que les 2 premières, va falloir commencer à réfléchir un peu.
    0
    1. dazdingue
       
      donc est-ce que ce serait une solution alors de modifier le "nombre = input etc" et "nombre = int(nombre)" par "choix = input etc" et "choix = int(choix)" ?
      0
      1. Utilisateur anonyme > dazdingue
         
        Essaye
        0
      2. dazdingue > Utilisateur anonyme
         
        et ca marche
        0
  15. Utilisateur anonyme
     
    Bon maintenant

    Toujours, uniquement avec la boucle while.

    Tu lances, tu entres 0
    Tu observes
    Si besoin tu relances, tu entres 1
    Tu observes
    Si besoin tu relances et tu entres 2
    Tu observes.

    Et tu reviens faire part de tes observations et si tu en conclues quelque chose tu le dis.
    0
    1. dazdingue
       
      bah cette fois oui tout marche et il n'y a pas de bug mais j'ai modifié mon programme, j'ai insérer une fonction elif
      https://img-19.ccm2.net/XB0AZpj_RX8st1YjteIK9k0o8TU=/05b9991487fa479d8c508ffe774766b6/tmp/Capture.PNG
      |fancy]
      0
  16. Utilisateur anonyme
     
    Bien pour le elif.

    Cela dit peux tu sans arrêter le logiciel entrer 2, puis 1, puis 0?
    0
    1. dazdingue
       
      non il faut que je redémarre le programme
      0
  17. Utilisateur anonyme
     
    donc ça ne marche pas.

    Pourquoi?
    0
    1. dazdingue
       
      parce que j'ai mis des break car sinon ca me faisait le truc infini
      0
  18. Utilisateur anonyme
     
    Non, c’est pas à cause ds break que ça ne marche pas.

    Plus haut, tu as écrit
    donc est-ce que ce serait une solution alors de modifier le "nombre = input etc" et "nombre = int(nombre)" par "choix = input etc" et "choix = int(choix)" ?
    Mais tu n’as pas fait exactement ça
    0
    1. dazdingue
       
      non effectivement je les ai supprimés car je les avais définis deux fois, raison pour laquelle il me demandait 2 fois justement

      en revanche, voilà mon programme principal : il me met qu'il y a une indentation incorrecte au niveau du if mais je ne vois pas vrmt pk il est indenté dans le while non ?

      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > dazdingue
       
      peux-tu poster du texte et pas des images? en veillant à utiliser les balises de code.
      0
    3. dazdingue > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      hum je peux essayer pour le texte oui et les balises de code, c'est bien transformer le texte par exemple en python, c'est ça ?
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > dazdingue
       
      tu n'avais pas cette erreur avant. quel est le changement qui a provoqué ce message d'erreur?
      0
    5. Utilisateur anonyme > dazdingue
       
      Ha ça y est tu recommences à te foutre de nous......
      0