Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème sur variable string

(python 3.1.2 sur mac OSX 10.6

Sujet résolu
    9 août 2010 à 13:55:15

    Coucou tout le monde !

    voilà, je tente d'apprendre le python tout seul comme un grand, à l'aide du livre "Apprendre à programmer avec Python3" de gérard Swinnen.
    Problème : comme toujours le code dans le bouquin ne se comporte pas de la façon souhaitée sur mon ordi.
    J'ai un problème particulier sur cet exemple concret :

    from sys import exit

    print("""
    Veuillez entrer les longueurs des 3 cotes
    (en separant ces valeurs a l aide de virgules) :""")
    a, b, c = eval(input())

    if a < (b+c) and b < (a+c) and c < (a+b) :
    print("Ces trois longueurs forment un triangle")
    else:
    print("Il est impossible de faire ce triangle")
    exit()

    f = 0
    if a == b and b == c :
    print("Ce triangle est equilateral.")
    f = 1
    elif a == b or b == c or c == a :
    print ("ce triangle est isocele.")
    f = 1
    if (a*a + b*b == c*c) or (b*b + c*c == a*a) or (c*c + a*a == b*b) :
    print("Ce triangle est rectangle")
    f = 1
    if f == 0 :
    print ("ce triangle est quelconque")



    il s'agit d'un bête exercice du livre, recopié tel quel, qui propose d'analyser trois longueurs pour déterminer quel triangle on peut faire avec.
    Or, lorsque je lance ce programme, la ligne qui apparaît en vert doit permettre à l'utilisateur de rentrer dans les variable a, b et c les trois longueurs, mais rien ne fonctionne si les longueurs en questions ne sont pas encadrées de " " ou de ' ' comme pour une chaîne de caractère.
    J'aimerais donc savoir par quel moyen je peux supprimer l'utilisation de ces guillemets.

    de plus, un autre élément de code ne fonctionne jamais, il s'agit de l'instruction end =" ", lorsque l'on écrit :
    print("machin bidule", end =" ")

    pourtant, là encore, ça fonctionne niquel selon le livre, mais pas sur mon ordi....

    voilà. merci d'avance pour votre aide. bonne journée

    :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      9 août 2010 à 14:23:44

      Citation

      J'aimerais donc savoir par quel moyen je peux supprimer l'utilisation de ces guillemets



      J'utilise pas python3, mais je pense que ça devrait fonctionner

      a, b, c=int(input()), int(input()), int(input())
      


      Le reste c'est du ressort de la version 3 de python, donc je ne m'y suis pas encore intéressé.

      Edit :
      Tu as aussi cette manière moins conventionnelle.

      var=("a", "b", "c")
      for i in var:
          globals()[i]=int(input()) # a chaque retour à la ligne tu rentres ton chiffre
      


      Et enfin cette manière de faire et plus parlante qu'un simple blanc

      >>> var=("a", "b", "c")
      >>> for i, j in enumerate(var):
              nombre="nombre_%s :" %i
              globals()[j]=int(input(nombre))
      
              
      nombre_0 :12
      nombre_1 :14
      nombre_2 :16
      >>> a
      12
      >>> b
      14
      >>> c
      16
      • Partager sur Facebook
      • Partager sur Twitter
        9 août 2010 à 14:31:43

        Ce code va demander 3 inputs (sur 3 ligne) ;)

        Ton code marche très bien chez moi, tu es sûr que tu utilises bien python 3 ?
        • Partager sur Facebook
        • Partager sur Twitter
          9 août 2010 à 15:28:39

          a, b, c = raw_input().split(",") ?
          • Partager sur Facebook
          • Partager sur Twitter
          yjltg.
          Anonyme
            9 août 2010 à 15:34:13

            Citation

            a, b, c = raw_input().split(",") ?



            python3?
            • Partager sur Facebook
            • Partager sur Twitter
              9 août 2010 à 15:36:16

              Citation : quelqun_dautre

              a, b, c = raw_input().split(",") ?


              Il manque le cast en int si tu fais ainsi non ?

              Citation : fred1599

              Citation

              a, b, c = raw_input().split(",") ?


              python3?


              A mon avis le PO n'utilise pas python 3 et c'est pour ça que son programme ne marche pas.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                9 août 2010 à 15:39:43

                Oui mais le PO dit bien

                Citation

                "Apprendre à programmer avec Python3"



                Donc je sais pas :(
                • Partager sur Facebook
                • Partager sur Twitter
                  9 août 2010 à 15:45:14

                  Moui il a du se tromper dans l'interpréteur :x

                  arteire tu utilises quoi pour coder ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 août 2010 à 18:15:39

                    Oulalala.. merci pour toutes ces réponses, je n'en espérais pas autant. z'êtes super.

                    Alors, pour faire dans l'ordre, fred1599, j'ai essayé ta première méthode et ça marche, merci bcp. par contre je ne me risque pas encore à la deuxième, étant donné que je ne maîtrise as encore la boucle for.

                    Par contre, Holt, oui, je suis sûr d'utiliser python 3, le 3.1.2 pour être exact. Ceci dit, il est vrai que j'ai remarqué deux trois bug, comme celui dont je parlais pour le end =" ", ou encore le fait que les fenêtres comme celle de turtle s'affichent une fraction de seconde avant de disparaître...bref.. je ne sais pas si c'est mac ou une mauvaise installation, mais il y a quelque chose qui ne tourne pas rond :)
                    Sinon, pour l'interpréteur, en fait, j'utilise le IDLE fourni avec python3 pour écrire mes programmes, que je début toujours avec # -*- coding:Latin-1 -*-, et que je nomme avec des extension .py
                    Ensuite, pour lancer mon programme, je fais appel à PythonLauncher 3.1.2 (j'ai bien vérifié ça, parce que j'ai aussi les 2.5 et 2.6 et des poussières)
                    Lorsque mon programme s'affiche, il m'ouvre deux fenêtre de terminal, dont une qui contient tout le chemin d'accès de mon fichier .py et le résultat, ou le message d'erreur.

                    Voilà voilà, je sais pas quoi dire de plus, je débute, et je comprend petit à petit que la difficulté est plus souvent à faire fonctionner le code qu'à l'écrire sans bug en fait... :/
                    Merci en tout cas :-)

                    PS : c'est quoi un "PO" ?? mdr
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      9 août 2010 à 18:43:44

                      Bonjour,

                      Pour ton problème avec l'argument end de print() je ne sais pas si c'est le même souci que sous windows, mais voici ce que j'ai observer :

                      la fonction print() n'affiche rien tant qu'elle ne rencontre pas un saut à la ligne ou un retour en début de ligne ('\n' ou '\r' ). Il faut, dans le cas où l'on ne veut pas aller à la ligne, forcer l'affichage du buffer avec la méthode flush() du flux de sortie stdout

                      Exemple :
                      import sys
                      print('Hello, World!', end='')
                      sys.stdout.flush() # <- a pour effet de forcer l'écriture
                      


                      Bien entendu, cela marche sous windows et j'ignore ce qu'il en est avec Mac ! :o

                      PS: Avec Python 3, si tu utilise IDLE tu n'es pas obligé de préciser l'encodage, ton fichier sera automatiquement encodé en UTF-8.

                      @+
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 août 2010 à 18:47:19

                        Citation : arteire

                        Oulalala.. merci pour toutes ces réponses, je n'en espérais pas autant. z'êtes super.

                        Alors, pour faire dans l'ordre, fred1599, j'ai essayé ta première méthode et ça marche, merci bcp. par contre je ne me risque pas encore à la deuxième, étant donné que je ne maîtrise as encore la boucle for.

                        Par contre, Holt, oui, je suis sûr d'utiliser python 3, le 3.1.2 pour être exact. Ceci dit, il est vrai que j'ai remarqué deux trois bug, comme celui dont je parlais pour le end =" ", ou encore le fait que les fenêtres comme celle de turtle s'affichent une fraction de seconde avant de disparaître...bref.. je ne sais pas si c'est mac ou une mauvaise installation, mais il y a quelque chose qui ne tourne pas rond :)
                        Sinon, pour l'interpréteur, en fait, j'utilise le IDLE fourni avec python3 pour écrire mes programmes, que je début toujours avec # -*- coding:Latin-1 -*-, et que je nomme avec des extension .py
                        Ensuite, pour lancer mon programme, je fais appel à PythonLauncher 3.1.2 (j'ai bien vérifié ça, parce que j'ai aussi les 2.5 et 2.6 et des poussières)
                        Lorsque mon programme s'affiche, il m'ouvre deux fenêtre de terminal, dont une qui contient tout le chemin d'accès de mon fichier .py et le résultat, ou le message d'erreur.

                        Voilà voilà, je sais pas quoi dire de plus, je débute, et je comprend petit à petit que la difficulté est plus souvent à faire fonctionner le code qu'à l'écrire sans bug en fait... :/
                        Merci en tout cas :-)

                        PS : c'est quoi un "PO" ?? mdr


                        PO = Posteur Original, toi ici en l'occurence :p
                        Sinon c'est bizarre tout ce que tu dis là ! J'utilise python 3 (sous Windows et sous Linux) et la fonction print marche très bien avec l'argument end, en revanche le code de fred1599 ne marche pas (j'ai un retour à la ligne entre chaque input, ce qui me parait normal vu qu'on appelle trois fois la fonction input).
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          9 août 2010 à 20:00:05

                          Citation

                          en revanche le code de fred1599 ne marche pas



                          Ba si tu le dis après

                          Citation

                          j'ai un retour à la ligne entre chaque input, ce qui me parait normal vu qu'on appelle trois fois la fonction input



                          Ce qui est normal et voulu!

                          Qui puis est la fonction print n'a aucun rapport avec mon code, d'ailleurs, il y a pas de print dans mon code :-°

                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 août 2010 à 20:17:19

                            Citation : fred1599

                            Citation

                            en revanche le code de fred1599 ne marche pas



                            Ba si tu le dis après


                            Je l'ai dis dans mon premier post que cela ferait 3 retours à la ligne ;)

                            Citation


                            Citation

                            j'ai un retour à la ligne entre chaque input, ce qui me parait normal vu qu'on appelle trois fois la fonction input



                            Ce qui est normal et voulu!


                            Je ne dis pas le contraire mais dans son premier post le PO voulait que les entrées soient sur la même ligne et séparée par des virgules ;)

                            Citation

                            Qui puis est la fonction print n'a aucun rapport avec mon code, d'ailleurs, il y a pas de print dans mon code :-°


                            Je faisais juste référence au fait que le PO n'arrivait pas à utiliser l'argument end dans son print...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 août 2010 à 20:25:26

                              ben pour le code de fred1599, moi aussi ça me fait le retour à la ligne, mais à la base, ce que je cherchais, c'était en effet de me débarrasser des " " que je devais utiliser au départ pour rentrer mes valeurs au clavier, donc c'est déjà pas mal.
                              Par contre, à ce propos, je me demande bien comment utiliser correctement eval(), parce qu'au début, c'est ça qui était utilisé dans le code du bouquin, mais nécessitait les guillemets.
                              En fait, on a :
                              a, b, c = eval(input())
                              

                              qui nécessite l'usage de guillemets avant de rentrer les nombres et :

                              a, b, c = int(input()), int(input()), int(input())
                              

                              qui permet de supprimer les guillemets mais oblige à des sauts de lignes.... o_O

                              donc je suis un peut paumé...

                              --------------------
                              Par contre, pour répondre à Holt et LeYan'tibus à propos de l'argument end =" ", j'ai refait l'essaie d'un code, recopié directement depuis le bouquin sur lequel j'apprend :
                              print("Veuillez entrer un nombre positif quelconque : ", end =" ")
                              ch = input()
                              nn = int(ch)
                              print("Le carré de", nn,"vaut", nn**2)
                              


                              lorsque j'execute ce code, j'ai le message d'erreur :
                              File "/Users/julien/Documents/test.py", line 1
                                  print("Veuillez entrer un nombre positif quelconque : ", end =" ")
                                                                                               ^
                              SyntaxError: invalid syntax
                              MacBook-Pro-de-Julien:Documents julienmonniot$


                              notez que j'ai aussi essayé en écrivant end =' ', parce que j'ai lu dans le bouquin que parfois c'est comme ça qu'on devait l'écrire, mais le résultat est le même....

                              et pis bon, pour être sûr d'avoir fait le tour, j'ai aussi tapé la première ligne du code ci dessus directement sur la console, et j'ai obtenu le même message d'erreur...
                              pas glop...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 août 2010 à 20:30:20

                                C'est bizarre, chez moi ton code marche nickel mais bon à force tu dois le savoir :p
                                Après je ne sais pas pourquoi tu as ce problème avec l'argument end, ni avec le eval(input())... Je n'ai jamais codé sous MAC donc je ne pourrais pas trop t'aider là dessus :(
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  9 août 2010 à 20:38:35

                                  Euh je n'ai pas python3, mais il y aurait pas une erreur d'espace entre 'end' et le '='???

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 août 2010 à 20:51:51

                                    merci quand même.
                                    bon, je vais vous embêter avec un dernier truc.. je post une capture d'écran des préférences de mon PythonLauncher 3.1.2, et comme je ne comprend rien au réglages, peut être que vous pourrez m'aider...

                                    Image utilisateur

                                    voilà, apparement on peut lui demander de lancer le code à l'aide de différentes instructions de la console, tel que pythonw, python, etc...
                                    alors je me demande, si je lui demande d'utiliser python3, ça peut marcher ?
                                    je n'aimerai pas modifier tous les réglages sans rien n'y comprendre, donc je demande avant quand m^me..^
                                    merci
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      9 août 2010 à 20:55:12

                                      Essaie, par exemple, de taper help(raw_input) dans ton shell python et si aucune erreur n'est déclenchés, alors tu es sous Python 2.x... Chez moi avec Python 3 ton premier script fonctionne aussi très bien !! :-°

                                      L'espace entre le 'end' et le '=' n'est pas un souci. :)

                                      [edit] pythonw est utiliser pour lancer des scripts .pyw qui ne nécessitent pas la console.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        9 août 2010 à 20:57:37

                                        nan, j'ai bien une erreur, d'ailleurs, l'entête de mon shell python est :

                                        Python 3.1.2 (r312:79360M, Mar 24 2010, 01:33:18)
                                        [GCC 4.0.1 (Apple Inc. build 5493)] on darwin
                                        Type "copyright", "credits" or "license()" for more information.
                                        >>>
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Problème sur variable string

                                        × 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