Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de débutant avec les classes

    13 août 2019 à 23:07:49

    Hello à tous,

    Je débute en Python et j'ai besoin de votre aide :

    Comme on le voit dans la capture le but est d'implémenter une classe qui permet de créer des listes d'entier ou de caractères afin d'en ajouter (sous forme de liste ou d'objet str ou int) et de le trier.

    Il faut pouvoir créer cet objet et l'afficher sous forme de liste sans mentionner ses attributs dans la console (cf : print(l1)) mais je n'arrive pas à trouver la solution, voici mon code :

    class SortedList:

    def __init__(self, element):

    self.list = []

    if type(element) == "int" or type(element) == "str":
     self.list.append(element)

    if type(element) == "list":

    for i in element:

    self.list += [i]

    self.list.sort()



    def add(self, element):

    if type(element) == "int" or type(element) == "str":
    self.list.append(element)

    if type(element) == "list":
    for i in element:
    self.list += [i]

    self.list.sort()
    return self.list

    J'ai deux problèmes: 

    1) si l1 = SortedList([5, 2, 3, 1]) et que je print(l1.list), j'obtiens une liste vide

    2) Au lieu de print l1.list j'aimerais print l1 tout court et afficher la liste résultante

    Merci d'avance pour vos réponses.

    -
    Edité par AlexandreB3 13 août 2019 à 23:44:17

    • Partager sur Facebook
    • Partager sur Twitter
      14 août 2019 à 7:10:38

      Bonjour,

      Quand tu fais print(un_objet), Python imprime le résultat de la méthode __str__().

      Si tu veux afficher ton tableau trié, il faut redéfinir cette méthode et lui retourner une string contenant ton tableau trié.

      • Partager sur Facebook
      • Partager sur Twitter
        14 août 2019 à 19:50:31

        Merci pour ta réponse, cela a résolu mon deuxième point

        En revanche je n'arrive toujours pas à comprendre pourquoi ma liste est vide lors de l'instanciation de mon objet, une idée ?

        J'ai réécrit le code de la fonction main ainsi : 

        def __init__(self, element):

        self.list = []

        if type(element) == "int" or type(element) == "str":
        self.list = self.list +[element]

        if type(element) == "list":
        self.list = self.list + element

        self.list.sort()

        -
        Edité par AlexandreB3 14 août 2019 à 19:52:38

        • Partager sur Facebook
        • Partager sur Twitter
          14 août 2019 à 20:31:30

          Poste avec les balises code, là on perd l'indentation et c'est dur à lire.

          Vu ton dernier extrait de code, je pense que si ta liste est vide, c'est juste que tu entres jamais dans les conditions if.

          EDIT : La fonction type ne renvoie pas une chaine de caractères si ça peut t'aider.

          -
          Edité par LoupSolitaire 14 août 2019 à 20:32:54

          • Partager sur Facebook
          • Partager sur Twitter

          Blond, bouclé, toujours le sourire aux lèvres...

          Problème de débutant avec les classes

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown