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 :

Problème liste d'ojets instanciés


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut Problème liste d'ojets instanciés
    bonjour à tous!
    Je suis debutante en Python mais pas en POO.
    Pour m'entraîner je fais un petit log de gestion de biblio...
    Je n'arrive pas à faire une liste d'objets de classe livre.
    Quand je l'affiche, seul le dernier livre instancié que j'ai rentré dans la liste s'affiche en 3 alors que je devrais avoir 3 livres distincs!
    Merci pour votre aide!
    bizzz

    Biblio2000.py

    Biblio.py

    Classe.py


  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Salut,

    Primo:
    Ca c'est HORRIBLE, pas pythonique du tout !!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    j=0
    while j!=len(ListeLectures):
    	print j, ListeLectures[j].Titre, ListeLectures[j].Av, ListeLectures[j].Libre, ListeLectures[j].Type
    	j=j+1
    fais plutôt ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for indice, livre in enumerate(ListeLecture):
      print indice, livre.Titre, livre.Av, livre.Libre, livre.Type
    ca pareil:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def RechercheListe(Liste,TitreLect):
    	TitreLecture='n'
    	i=0
     
    	while TitreLecture=='n' and i!=len(Liste):
    		print i, Liste[i].Titre
    		if Liste[i].Titre == TitreLect:
    			TitreLecture= Liste[i].Titre
    		i=i+1
    	return TitreLecture
    fais plutot ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def RechercheListe(Liste,TitreLect):
      titreLecture = [livre.Titre for livre in Liste if TitreLect in livre.Titre]
      return titreLecture or 'n'
    pour ajouter des livres, tu as juste à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    livre1 = Livre(...)
    livre2 = Livre(...)
    livre3 = Livre(...)
    listeLivre = []
    listeLivre.append(livre1)
    listeLivre.append(livre2)
    listeLivre.append(livre3)
    inserer un element dans une liste en determinant sa longueur = pas pythonique du tout => liste.append() => beaucoup mieux !!!

    Dans ta definition de classe, erreurs:
    => une declaration de classe doit posseder une methode __init__(self, ..) c'est a l'interieur de celle-ci que tu vas definir les attributs propres aux instances de ta classe, les attributs que tu definis directement sous ta declaration de classe sont communs à TOUTES les instances crées => d'ou ton erreur.

    Etre deja aguerri en POO n'empeche pas de lire les tutoriaux pour apprehender un nouveau langage, python est fait pour etre propre et simple, les variables intermediaires qui representent les indices d'une liste pour ajouter ou parcourir sont inutiles la plupart du temps.
    Prend le temps de lire les tutoriaux pour comprendre la simplicite, ton code en sera plus beau, ton developpement plus rapide et les risques d'erreurs reduits.


    pythoniquement,
    pacificator

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut merci!

    Merci!
    J'ai lu le tuto de Henri Garreta, Olivier Berger, Guido Van Rossum mais il ne traite pas assez bien de l'héritage je trouve (pas de cas pratique).
    Je fais du C et je l'ai un peu fais à la manière C.
    Je crois que maitenant j'ai bien compris...
    En tout cas merci de ton aide précieuse et je lirai plus de doc!
    bon WE!
    bizzz
    PS:
    pythoniquement , la solution:

    fichier Classe.py
    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
    class Lectures :
    	def __init__(self, Libre, Type):
    		self.Libre = Libre	#'n' pour non, 'o' pour oui
    		self.Type = Type
     
     
    class Manuel(Lectures):
    	def Consulter(self):
    		if Libre == 'o':
    			Libre='n'
    		else:
    			print "Pas disponible!"
     
    	def Rendre(self):
    		if Libre == 'n':
    			Libre='o'
    		else:
    			print "Deja rendu!"
    			Libre='n'
     
     
     
    class Magazines(Lectures):
    	def __init__(self, NbRestant):
    		self.NbRestant=0 #nbre de mag restant
    	def Vendre(self):
    		if NbRestant > 0:
    			NbRestant = NbRestant -1
    		else:
    			print "Plus en stock, desole"
     
     
    class Livres(Lectures):
    	def __init__(self, Libre, Type, Titre, Av):
    		Lectures.__init__(self, Libre, Type)
    		self.Titre= Titre
    		self.Av= Av
     
    	def Emprunter(self):
    		if Libre == 'o':
    			Libre='n'
    		else:
    			print "Pas disponible!"
     
    	def Rendre(self):
    		if Libre == 'n':
    			Libre='o'
    		else:
    			print "Deja rendu!"
    			Libre='n'
    Fichier Biblio.py
    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
     
    import Classe
     
    ListeLecture = []
     
    #livre1 = Classe.Livres #Instanciation
    #livre1.Titre='Da Vinci Code'
    #livre1.Av='o'
    #livre1.Libre='o'
    #livre1.Type='aventure'
    #ListeLecture.append(livre1)
     
     
    #livre2=Classe.Livres #Instanciation
    #livre2.Titre='Alice au pays des merveilles'
    #livre2.Av='n'
    #livre2.Libre='o'
    #livre2.Type='enfant'
    #ListeLecture.append(livre2)
     
    #NouvLivre=Classe.Livres #Instanciation
    #NouvLivre.Titre='James Bond'
    #NouvLivre.Av='o'
    #NouvLivre.Libre='o'
    #NouvLivre.Type='espionage'
    #ListeLecture.append(NouvLivre)
     
    livre1 = Classe.Livres('o', 'aventure', 'Da Vinci Code1', 'o')
    livre2 = Classe.Livres('o', 'aventure', 'Da Vinci Code2', 'o')
    livre3 = Classe.Livres('o', 'aventure', 'Da Vinci Code3', 'o')
     
    ListeLecture.append(livre1)
    ListeLecture.append(livre2)
    ListeLecture.append(livre3)
     
     
    for indice, livre in enumerate(ListeLecture):
    	print indice, livre.Titre, livre.Av, livre.Libre, livre.Type
     
    def RechercheListe(Liste,TitreLect):
    	TitreLecture='n'
    	i=0
     
    def RechercheListe(Liste,TitreLect):
    	titreLecture = [livre.Titre for livre in Liste if TitreLect in livre.Titre]
    	return titreLecture or 'n'
    Fichier à interpréter:Biblio2000.py
    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
     
    import Classe
    import Biblio
     
    boucle = 'o'
     
     
    while boucle=='o':
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print "				Bienvenu sur Bliblio2000"
    	print " "
    	print " "
    	print "Le logiciel de gestion d'une bibliotheque"
    	print "1) Emprunter un livre"
    	print "2) Rendre un livre"
    	print "3) Vendre un magazine"
    	print "4) Quitter"
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	print " "
    	rep=int(raw_input('choix:'))
     
    	if rep==1:
    		boucle = 'n'
    		TitreLivre=raw_input('Titre du livre?')
    		print Biblio.RechercheListe(Biblio.ListeLectures, TitreLivre)
     
     
     
     
    	elif rep==2:
    		boucle = 'n'
     
    	elif rep==3:
    		boucle = 'n'
     
    	elif rep==4:
    		boucle = 'n'
    	else:
    		auxi=raw_input('Choix incorrect,appuyer sur une touche...')
    MERCI

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    bonne continuation et bon python

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [presque résolu]Probléme liste déroulante
    Par jojo57 dans le forum Access
    Réponses: 5
    Dernier message: 21/04/2006, 11h57
  2. [Oracle 9ir2]problème de recréation d'instance
    Par seal dans le forum Oracle
    Réponses: 3
    Dernier message: 02/11/2005, 12h02
  3. Réponses: 2
    Dernier message: 21/01/2005, 12h55
  4. Problème liste d'affichage
    Par nicolas66 dans le forum OpenGL
    Réponses: 6
    Dernier message: 06/12/2004, 10h10
  5. [JSP]Problème liste deroulante dynamique
    Par besco dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/09/2004, 17h58

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