Partage
  • Partager sur Facebook
  • Partager sur Twitter

Débutant : Erreur avec un while

Sujet résolu
    6 août 2015 à 20:52:23

    Bonjour,

    while 1:
        oorn = ""        
        while oorn != "O" and oorn != "N":
            oorn = input("Souhaitez-vous additionner d'autres nombres ? O/N     ")
            if oorn == "O":
                print("Vous avez choisi oui")
            elif oorn == "N":
                break
                exit()
        

    J'essaie de faire un code qui permettrait de sortir d'une boucle en saisissant O (oui) ou N (non) via un input. Si celui-ci récupère autre chose que "O" ou "N", on recommence le input. Mais j'ai l'erreur :

    Traceback (most recent call last):

      File "E:\Apprentissage\Informatique\Python\Projets\train.py", line 4, in <module>

        oorn = input("Souhaitez-vous additionner d'autres nombres ? O/N     ")

      File "<string>", line 1, in <module>

    NameError: name 'O' is not defined

    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2015 à 21:05:22

      Salut,

      C'est parce que tu es en python 2.7 et que dans cette version input interprète directement ce qui est entré. Il te faut donc le convertir en chaîne de caractères:

      oorn = str(input("Souhaitez-vous additionner d'autres nombres ? O/N     "))
      
      #Et pour la petite astuce, tu peux faire de manière plus élégante:
      while oorn not in ("0", "N"):
      • Partager sur Facebook
      • Partager sur Twitter
      Précepte: Le mieux est l'ennemi du bien
        6 août 2015 à 21:57:09

        Salut, merci de ton aide ; je suis désolé mais j'ai suivi à la lettre ton message et j'ai exactement la même erreur qui est toujours présente.
        • Partager sur Facebook
        • Partager sur Twitter
          6 août 2015 à 22:10:45

          Oui désolé je me suis planté :honte:. Il faut utiliser à la place raw_input():

          oorn = raw_input("Souhaitez-vous additionner d'autres nombres ? O/N     ")


          Donc au final pas besoin de convertir en chaîne de caractère. En fait raw_input() renvoie directement le résultat en chaîne de caractères. Et c'est le comportement de input() en python 3 (mais pas en python 2.7).

          • Partager sur Facebook
          • Partager sur Twitter
          Précepte: Le mieux est l'ennemi du bien
            6 août 2015 à 22:15:32

            Merci beaucoup ça fonctionne :D

            Mais du coup que fait la fonction input() comparé à raw _input() et aussi pourquoi la dernière version de Python se nomme 2.7 au lieu de continuer sur 3.x ? Je trouve ça perturbant.

            • Partager sur Facebook
            • Partager sur Twitter
              6 août 2015 à 22:33:05

              En fait il y a 2 versions de python qui existent en parallèle: python 2.7 et 3.X. La version 3 est une remise à plat du langage, un nouveau départ. Mais il a fallu du temps pour que les principaux modules et bibliothèques soient compatibles avec la dernière version. Donc tout ce temps, les 2 versions ont coexistées. Aujourd'hui, la grande majorité des librairies sont compatibles 3.X, donc il n'y a plus beaucoup de raison de rester en 2.7 (tu arrive au bon moment :D).

              L'une des remise à plat se porte justement sur input() et raw_input(). Dans la version 3.X, raw_input() disparaît et il ne reste que input(). Mais celui-ci n'a plus le même comportement que dans la version 2.7, il se comporte comme raw_input().

              Il y a aussi le cas de print. En python 2.7 c'est un mot-clé, alors qu'en python 3.X c'est une fonction intégrée (donc bien plus intéressante à utiliser)

              • Partager sur Facebook
              • Partager sur Twitter
              Précepte: Le mieux est l'ennemi du bien

              Débutant : Erreur avec un while

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown