IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Liste chaines en Python - Besoin d'aide pour comprendre


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut Liste chaines en Python - Besoin d'aide pour comprendre
    Bonjour à toutes et à tous. Je n'arrive pas à comprendre pourquoi j'ai ce message d'erreur ni même ce que veux dire (str = string ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'str' object has no attribute 'tete'

    J'essai de créer une liste chainée mais je m'y prends mal quelque part et je n'arrive pas à savoir où. (La ligne en erreur c'est la ligne 26).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    class Cellule:
     
        def __init__(self):
            self.valeur = None
            self.suivant = None
     
     
    class Sequence:
     
        def __init__(self):
            self.tete = None
     
        def creation_liste_chaine(self):
     
            liste = list(testtext) # Je convertis ma chaine de string en une liste de lettre
            max = len(liste)-1
     
            avant = None # Je défini un pointeur qui sera predecesseur
            for i in range(0,max):
     
                cel = Cellule() # Je créé une cellule vide
     
                if avant == None: # Si mon predecesseur est vide
                    cel.valeur = liste[i] # Je lui associe une valeur
                    avant = cel # J'enregistre ma cellule comme prédecesseur
                    cel.suivant = self.tete # Je chaine avec ma tête
                    self.tete = cel #<--- ? faut il rechainer encore une fois ?
     
                else:
                    cel.valeur = liste[i]
                    avant.suivant = cel
     
     
     
    testtext = \
    "AB\
     CD\
    EF\
    GH\
    IJ\
    "
    Est-ce que quelqu'un pourrait m'expliquer où est on mon erreur svp ?
    PAr avance merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par CaMarchePas() Voir le message
    J'essai de créer une liste chainée mais je m'y prends mal quelque part et je n'arrive pas à savoir où. (La ligne en erreur c'est la ligne 26).
    Si l'accès a self.tete plante en disant que 'str' object has no attribute 'tete', c'est que "self" est un str(ing). Et comme votre code ne montre pas comment est appelée la méthode "creation_liste_chaine"...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Bonjour,

    Je n'arrive pas à comprendre pourquoi j'ai ce message d'erreur ni même ce que veux dire (str = string ?)
    Je vous arrête tout de suite, il faut prendre un tutoriel. Commencer les classes et ne pas connaître les types de base du langage c'est absolument impossible...

    AttributeError: 'str' object has no attribute 'tete'
    Là encore une fois ça pose un problème, on apprend pas les classes sans savoir de quoi elle se compose...

    Dire qu'un objet string n'a pas d'attribut tete devrait faire tilt.

    ------------------------------------------------

    Mis à part cela, comment faîtes vous le test pour arriver à cette erreur ?
    Je ne vois pas où le problème se pose... dans votre code actuellement écrit.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut
    Je l'appelle par la dernière ligne du code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    class Cellule:
     
        def __init__(self):
            self.valeur = None
            self.suivant = None
     
     
    class Sequence:
     
        def __init__(self):
            self.tete = None
     
        def creation_liste_chaine(self):
     
            liste = list(testtext) # Je convertis ma chaine de string en une liste de lettre
            max = len(liste)-1
     
            avant = None # Je défini un pointeur qui sera predecesseur
            for i in range(0,max):
     
                cel = Cellule() # Je créé une cellule vide
     
                if avant == None: # Si mon predecesseur est vide
                    cel.valeur = liste[i] # Je lui associe une valeur
                    avant = cel # J'enregistre ma cellule comme prédecesseur
                    cel.suivant = self.tete # Je chaine avec ma tête
                    self.tete = cel #<--- ? faut il rechainer encore une fois ?
     
                else:
                    cel.valeur = liste[i]
                    avant.suivant = cel
     
     
     
    testtext = \
    "AB\
     CD\
    EF\
    GH\
    IJ\
    "
     
    Sequence.creation_liste_chaine(testtext)
    Je vais donc m'atteler à trouver de la documentation sur les class si mon problème vient de là

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    creation_liste_chaine ne prend pas d'argument. Surpris ? Voir le tutoriel sur les classes, effectivement ça vient de là

    EDIT: selon l'utilisation que vous faîtes de votre classe, le décorateur classmethod semble plus adapté, mais quelques modifications seront à faire niveau syntaxes.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Citation Envoyé par CaMarchePas() Voir le message
    Je l'appelle par la dernière ligne du code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
     
    Sequence.creation_liste_chaine(testtext)
    Je vais donc m'atteler à trouver de la documentation sur les class si mon problème vient de là
    Dans votre premier post, le code s'arrêtait à la ligne 41.

    Cela étant, Sequence().creation_liste_chaine() pourrait fonctionner sans erreur: on crée une instance et on appelle dans la foulée la méthode creation_liste_chaine sans paramètre (puisqu'elle n'en prend pas).

    Mais çà ne va pas vous aider beaucoup car le reste du code est incompréhensible! Vous cherchez à faire quoi? transformer une séquence de caractères en une suite de cellules chaînées? Essayez d'y arriver d'abord en décortiquant les étapes sur une feuille de papier!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Dans votre premier post, le code s'arrêtait à la ligne 41.

    Cela étant, Sequence().creation_liste_chaine() pourrait fonctionner sans erreur: on crée une instance et on appelle dans la foulée la méthode creation_liste_chaine sans paramètre (puisqu'elle n'en prend pas).

    Mais çà ne va pas vous aider beaucoup car le reste du code est incompréhensible! Vous cherchez à faire quoi? transformer une séquence de caractères en une suite de cellules chaînées? Essayez d'y arriver d'abord en décortiquant les étapes sur une feuille de papier!

    - W
    Oui c'est ce que j'essai de faire en vain, créer une liste chainée a partir d'une liste string.
    J'ai déjà essayé de décortiquer sur une feuille de papier mais en vain, d'où le fait que je suis venu demander de l'aide parce que je n'avançais plus.

    Le problème a été mis en évidence, je n'ai pas les connaissances nécessaire pour créer un code avec des class.

    Merci à vous

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Citation Envoyé par CaMarchePas() Voir le message
    J'ai déjà essayé de décortiquer sur une feuille de papier mais en vain, d'où le fait que je suis venu demander de l'aide parce que je n'avançais plus.
    Sûr que si vous n'arrivez déjà pas à visualiser ce que vous voulez obtenir sur une feuille de papier, on ne va pas pouvoir vous aider.
    Mais alors ce n'est pas juste avec les class que vous avez un soucis.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 839
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par CaMarchePas() Voir le message
    Oui c'est ce que j'essai de faire en vain, créer une liste chainée a partir d'une liste string.
    Un peu bizarre comme TP car Python offre des outils natifs permettant d'insérer dans des listes.

    En effet, le principal avantage d'une liste chainée est de pouvoir insérer un élément n'importe où sans avoir à décaler tout le reste. Mais les listes de base python permettent déjà d'insérer un élément où on veut (et quelque chose me dit que les listes Python sont elles-même chainées en interne justement pour pouvoir faire ça facilement). Donc pourquoi faire mal ce qui n'est pas besoin de faire car déjà existant ?

    Mais bon, pourquoi pas...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #/usr/bin/env python3
    # coding: utf-8
     
    class Cellule:
    	def __init__(self, v=None):
    		self._valeur=v
    		self._suivant=None
    	def __str__(self):
    		return "id=%x, v=%s, next=%s" % (
    			id(self),
    			self._valeur,
    			"%x" % id(self._suivant) if self._suivant is not None else "None",
    		)
    	# __str__()
    # class Cellule
     
    class Sequence:
    	def __init__(self):
    		self.__tete=None
    		self.__len=0
     
    	def creation_liste(self, txt):
    		for c in txt:
    			# On crée une nouvelle cellule
    			cel=Cellule(c)
    			self.__len+=1
     
    			# La cellule se met en tête
    			cel._suivant=self.__tete
    			self.__tete=cel
    		# for
    	# creation_liste()
     
    	def __str__(self):
    		s=""
    		c=self.__tete
    		while c is not None:
    			s+="%s\n" % c
    			c=c._suivant
    		# while
    		return s + "(len=%d)" % self.__len
    	# __str__()
    # class Sequence
     
    seq=Sequence()
    seq.creation_liste("abcdefghijkl")
    print(seq)

    PS: super le pseudo. On sent la motivation pour progresser...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [Python 3.X] Python: besoin d'aide pour un petit programme
    Par Intrepid13 dans le forum Général Python
    Réponses: 9
    Dernier message: 14/10/2015, 19h19
  2. [Python 3.X] Python: besoin d'aide pour un petit programme
    Par Intrepid13 dans le forum Général Python
    Réponses: 2
    Dernier message: 11/10/2015, 04h21
  3. besoin d'aide pour comprendre un exo simple de java
    Par chadel dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 23h27
  4. [MySQL] besoin d'aide pour comprendre les injections sql
    Par cassy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/01/2007, 14h21
  5. Besoin d aide pour comprendre un code
    Par litlebasic dans le forum Delphi
    Réponses: 4
    Dernier message: 22/06/2006, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo