Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec le TP 3 du tuto

Sujet résolu
    19 juillet 2013 à 8:34:43

    Bonjour à tous,

    Je suis en train de faire le TP3 du tuto (la classe de dictionnaire ordonné) et il y a un truc que je capte pas dans le code de la méthode qui permet de trier le dictionnaire. Voilà le code de la correction :

    def sort(self):
            """Méthode permettant de trier le dictionnaire en fonction de ses clés"""
            # On trie les clés
            cles_triees = sorted(self._cles)
            # On crée une liste de valeurs, encore vide
            valeurs = []
            # On parcourt ensuite la liste des clés triées
            for cle in cles_triees:
                valeur = self[cle]
                valeurs.append(valeur)
            # Enfin, on met à jour notre liste de clés et de valeurs
            self._cles = cles_triees
            self._valeurs = valeurs

    Ce que je capte pas c'est comment cette ligne-là

    valeur = self[cle]


    peut renvoyer la valeur associée à l'origine à la clé. Je m'attendrais plutôt à ce que ça renvoie la valeur dans le liste de valeurs qui a le même indice que la clé, à savoir pas la bonne puisque les clés ont été triées alors que les valeurs non. Et pourtant ça marche...

    Si quelqu'un a compris ce que je raconte et peut m'éclairer c'est cool.

    • Partager sur Facebook
    • Partager sur Twitter
      19 juillet 2013 à 8:41:20

      Bonjour,

      C'est grâce à cette fonction :

      def __getitem__(self, cle):
              """Renvoie la valeur correspondant à la clé si elle existe, lève
              une exception KeyError sinon"""
               
              if cle not in self._cles:
                  raise KeyError( \
                      "La clé {0} ne se trouve pas dans le dictionnaire".format( \
                      cle))
              else:
                  indice = self._cles.index(cle)
                  return self._valeurs[indice]

      __getitem__ permet de redéfinir le comportement de l'opérateur [] :-)


      EDIT : Après lecture du post de Nohar ci-dessous, je me rend compte que je n'ai pas compris ta question. Toutes mes excuses. Ma réponse ne vaut que pour un accès ultérieur, par exemple lorsque tu fais "monDicoTrie[x]".

      -
      Edité par Ntcha 19 juillet 2013 à 8:46:56

      • Partager sur Facebook
      • Partager sur Twitter
        19 juillet 2013 à 8:44:41

        Les clés triées ne sont pas encore enregistrées dans l'attribut _cles de l'objet au moment où cette ligne est exécutée, donc on peut encore accéder à toutes les valeurs normalement. L'instance n'est modifiée qu'à la fin de la méthode.

        • Partager sur Facebook
        • Partager sur Twitter
        Zeste de Savoir, le site qui en a dans le citron !
          19 juillet 2013 à 8:49:12

          Oui mais dans cette fonction, l'indice qui est passé en paramètre de la liste des valeurs, c'est celui de la liste des clés. Et comme dans la méthode 'sort', on part des clés qui ont été triées, je ne comprends pas que ce soit la bonne valeur qui soit renvoyée, ça devrait être arbitrairement la valeur qui se trouve désormais en face de la clé...
          • Partager sur Facebook
          • Partager sur Twitter
            19 juillet 2013 à 8:50:32

            Ok Nohar je te remercie je n'avais pas vu ton message
            • Partager sur Facebook
            • Partager sur Twitter
              19 juillet 2013 à 8:53:07

              Ok,  c'est plus clair, merci, merci :)
              • Partager sur Facebook
              • Partager sur Twitter

              Problème avec le TP 3 du tuto

              × 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