Partage
  • Partager sur Facebook
  • Partager sur Twitter

Différence entre : qqch et 'qqch'

sans et avec apostrophes

Sujet résolu
    20 mars 2015 à 17:46:10

    Bonjour,

    Je ne savais pas que mettre comme titre, je pense que celui-ci n'est pas très parlant, mais j'ai un souci de compréhension de syntaxe :

    Voici mon code :

    class Person():
        def __init__(self, name):
            self.name = name
            
        def toString(self):
            print str(self.name)
        
        def __str__(self):
            return str(self.name)
    
           

    Rien de bien spécial jusque-là. C'est à partir d'ici que j'ai une petite question :

    >>> pers = Person("LX")
    >>> pers.name
    'LX'
    >>> pers.toString()
    LX
    >>> pers.__str__()
    'LX'
    

    Quelle est la différence entre les apostrophes dans le 'LX' et le simple LX ?

    Est-ce du à la fonction return puis à la fonction print ? D'ailleurs quelle est la différence entre ces deux fonctions ?

    En vous remerciant d'avance et à bientôt !





    -
    Edité par LtodaX 20 mars 2015 à 18:03:42

    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2015 à 19:30:28

      Bonjour,

      Premièrement, return n'est pas une fonction. C'est un mot clef qui te permet de retourner une valeur à l'appelant. En l'occurrence, ici, tu retournes une chaîne de caractères. Dans l'interpréteur interactif, tu obtiens une représentation pour chaque expression que tu tapes (hors None). Cette représentation est ce que tu entrerais dans Python pour retrouver le même objet ('LX' pour une chaîne de caractères). En revanche, print imprime cette chaîne de caractères, non sa représentation, donc pas besoin de guillemets autour.

      • Partager sur Facebook
      • Partager sur Twitter
        21 mars 2015 à 9:53:24

        Salut,

        Merci pour ta réponse rapide, j'y vois plus clair maintenant.

        Je me permets de poser à nouveau une dernière question en rapport avec mon exercice, s'il faut que je créée un nouveau sujet je le ferai, mais je ne veux pas surcharger le forum de nouveaux topics.

        Je cherche faire une boucle qui consiste à prendre un élément au hasard (via la fonction choice) dans une liste, qu'on me le retourne et que celui-ci se pop de la liste une fois que c'est fait. J'ai tenté quelque chose, mais je ne comprends pas pourquoi est-ce que les noms sortent plusieurs fois, malgré le pop.

        # -*- coding: utf-8 -*-
        from random import *
        
        class Person():
            def __init__(self, name):
                self.name = name
            def __str__(self):
                return "Personne : " + str(self.name)
        
        class Etudiant(Person):
            def __init__(self, name, noEtudiant):
                Person.__init__(self, name)
                self.noEtudiant = noEtudiant
            def __str__(self):
                return Person.__str__(self)+ ", no Etudiant : " + str(self.noEtudiant)
        
        #Et ici pour ce que je cherche à faire
        
        name = ["Monod", "Silva", "Jaquet", "Morier"]
        
        
        for i in range(4):
            print Etudiant(choice(name), randint(1000,1500))
            name.pop()
        

        Je me suis permis de remettre pour que ce soit plus clair.

        En l'occurrence, lorsque je lance mon script, il y a un nom (au hasard) qui ressort plusieurs fois, malgré le pop.

        J'ai tenté de mettre name.pop(i), mais ce n'est pas plus efficace (Erreur : pop index out of range).

        Merci !

        • Partager sur Facebook
        • Partager sur Twitter
          21 mars 2015 à 10:10:48

          Déjà, je ne te conseille pas de faire from random import *, ça encombre inutilement l'espace de nommage courant, préfère from random import choice, randint.

          Maintenant, pour ton problème, il vient du fait que pop retire le dernier élément de la liste, mais ton choice sur la ligne précédente n'a aucune influence sur lui. Face à cela deux solutions: tu récupères dans la liste name l'index du nom que tu viens de tirer et tu le supprimes avec pop(i). Mais étant donné que tu ne stockes nulle part le nom de l'étudiant, il te faudra aussi modifier le code à ce sujet. Sinon, une solution préférable, est de ne plus utiliser choice, mais de faire un shuffle (du module random elle aussi) sur ta liste, puis de récupérer un étudiant à l'aide de pop:

          shuffle(name)
          for i in range(4):
            print Etudiant(name.pop(), randint(1000, 1500))
          
          Ou encore, puisque tu n'as visiblement pas besoin de les supprimer de la liste:
          shuffle(name)
          for student_name in name:
            print Etudiant(student_name, randint(1000, 1500))
          

          À noter aussi que ta variable name est plutôt mal nommée puisqu'elle ne contient pas un nom mais plusieurs.

          • Partager sur Facebook
          • Partager sur Twitter
            21 mars 2015 à 10:57:53

            C'est vrai qu'il est inutile que je les supprime de la liste, je ne connaissais que pop pour faire ce que je voulais.

            Merci pour tes suggestions et ton aide.

            • Partager sur Facebook
            • Partager sur Twitter

            Différence entre : qqch et 'qqch'

            × 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