Partage
  • Partager sur Facebook
  • Partager sur Twitter

questions sur input()

Sujet résolu
    24 août 2010 à 22:45:30

    Bonjour
    Je débute en programmation (à titre de hobby) avec python. Pour m'exercer, j'ai conçu un petit programme qui donne la liste de tous les nombres premiers sur un intervalle choisi par l'utilisateur. Il fonctionne très bien, mais deux choses me turlupinent:

    1) le programme demande à l'utilisateur d'entrer les valeurs des variables borne_inf et borne_sup qui vont définir l'intervalle sur lequel sera fait le calcul. Ca donne:

    borne_inf=input("borne inférieure?")
    borne_sup=input("borne supérieure?")
    


    Et puis juste après il y a plusieurs conditions qui sont vérifiées, notament
    while(n<borne_inf):
    

    Ce qui me paraît bizarre c'est que ça marche très bien, python exécute la boucle sans sourciller, alors que j'ai appris par la suite que input() renvoie une chaîne de charactères! Comment il peut faire ce test alors que j'ai omis (dans mon insouciance) de changer le type de borne_inf? Est-ce que l'interpréteur fait lui-même la conversion en int au moment du test?

    2) Ensuite j'ai voulu améliorer le programme, pour qu'il donne d'abord combien il a trouvé de nombres premiers, puis demande à l'utilisateur si il veut afficher la liste. Mais là ça coince et je sais pas pourquoi.

    print "il y a ", len(liste), "nombres premiers dans cette tranche."
    print "voulez-vous afficher la liste? (O/N)"
    reponse=input()
    if reponse.lower()=="o":
    	print liste
    


    J'obtiens l'erreur:

    Traceback (most recent call last):
    File "/home/martin/nb_premiers2.py", line 38, in <module>
    reponse=input()
    File "<string>", line 1, in <module>
    NameError: name 'o' is not defined


    Et là je ne comprends pas du tout pourquoi...

    Merci de m'éclairer!


    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2010 à 23:24:24

      Salut,

      1)En python 2.6, un input() renvoie un int.
      En python 3.x, un input() renvoie quant à lui un string.
      A lire ton code, tout laisse croire que c'est un code écrit en python 2.6.
      C'est normal qu'il n'y ait pas d'erreur puisque c'est correcte pour ta portion de code.

      2)
      reponse=input()
      if reponse.lower()=="o":
      	print liste
      

      L'erreur est que ton code est du python 2.6 donc le input() renvoie un int. Et toi, tu veux appliquer une méthode réservée au string à un int ! En plus, tu compare le tout avec encore un string.
      En python 2.6, ce sera raw_input() (lui il renvoie un string) qui serait approprié pour récupérer la réponse.

      Et puis, à l'avenir, fait gaffe de vérifier la version de python que tu utilise ( et précise le dans tes messages)
      • Partager sur Facebook
      • Partager sur Twitter
        24 août 2010 à 23:30:21

        D'accooord...
        En effet j'utilise python 2.6
        Je ne pensais pas que ça faisait une si grosse différence.

        Merci pour ta réponse!
        • Partager sur Facebook
        • Partager sur Twitter
          24 août 2010 à 23:41:03

          Citation : markip

          Je ne pensais pas que ça faisait une si grosse différence.



          Et ben si. La branche Python 3.x casse toute compatibilité descendante avec les branches antérieurs. Et ces "petites" différences sont en fait fondamentales.

          Citation : markip

          Merci pour ta réponse!


          C'est tout naturel !
          • Partager sur Facebook
          • Partager sur Twitter

          questions sur input()

          × 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