Bonjour,
Je fais une implémentation de liste statique et je suis confronté à un étrange problème, n'arrivant pas à le rectifier malgré plusieurs tentative de debugg, je laisse d'autres yeux voir ce que je n'aurais pas vu.
En gros un tableau (ou liste) d'objet (Cellule) est créé et j'ajoute avec la méthode insererListe le data dans l'objet. Mais si je cré une liste de taille 4 par exemple initialisé normalement à None (voir objet Cellule), si j'insère une seul donnée et que je fais ensuite un print de la liste logiquement je devrais recevoir en sortie une seule valeur or il affiche 4 fois les memes valeurs
pour l'objet Cellule
pour l'objet liste
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 class Cellule: def __init__(self): self.__next = -2 self.__data= None def GetData(self): return self.__data def GetSuivant(self): return self.__next def SetData(self,Obj): self.__data = Obj def SetSuivant(self, n): self.__next= n
et le fichier d'appel
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
44
45
46
47
48
49
50
51
52
53
54
55
56 from Cellule import Cellule class Liste: def __init__ (self,t=3): self.taille= t+1 self.tete = 0 self.tab = [Cellule()]*(self.taille) self.tab[0].SetSuivant(-1) self.curseur = 0 def getCurseur(self): return self.tab[self.curseur].GetSuivant() def allerAuDebut(self): self.curseur = self.tete def voir(self): if (self.getCurseur() != -1): return self.tab[self.getCurseur()].GetData() else: return None def avancer(self): if (self.getCurseur() != -1): self.curseur = self.tab[self.curseur].GetSuivant() return True else: return False def inserer (self, Obj): i= 0 while ((i< self.taille) and (self.tab[i].GetSuivant() !=-2)): i=i+1 if i == self.taille: return False else: self.tab[i].SetData(Obj) self.tab[i].SetData(Obj) self.tab[i].SetSuivant(self.avancer()) self.tab[self.curseur].SetSuivant(i) return True def supprimer(self): if (self.getCurseur() !=-1): self.n = self.getCurseur() self.tab[self.curseur].SetSuivant(self.tab[self.n].GetSuivant()) self.tab[self.n].SetSuivant = -2 return True else: return False def afficheListe(self): for i in range(self.taille): print self.tab[i].GetData()
enfin le résultat dans le terminal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 from Liste import Liste MyListe = Liste() MyListe.inserer(8) MyListe.afficheListe()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Trashy:~ Trashy$ python /python/main.py 8 8 8 8
Partager