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 :

probleme pour recuperer des valeurs avec des classes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2017
    Messages : 43
    Par défaut probleme pour recuperer des valeurs avec des classes
    Bonjour,
    désolé de vous déranger. j'essaye de faire un uno sur python mais je rencontre quelques problèmes. J'ai créé une class joueur et une class table. dans cette class table je crée une liste avec mes joueurs le problème c'est que cette liste est vide après alors qu'elle était pas vide avant.
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    class Joueur():
         def __init__(self,player_id,type_j):
            """ Notre méthode constructeur """
            self.player_id = player_id
            self.type_j = type_j
            self.main=[]
            self.score = 0
            self.manche_g=0
     
     
     
     
     
     
         def get_type (self):
            return self.type_j
     
         def get_type (self):
            return self.score
         def get_type (self):
            return self.main
     
         def afficher_nom(cls) :
            print(cls.player_id)
     
    class table():
     
     
         def __init__(self, nb_joueur=2): # Notre méthode constructeur
            self.nb_joueur=nb_joueur
            self.tour=[]
    ##        self.joueur.append(self.creation_joueur())
    ##        J=Joueur()
     
            self.pioche = ['0b','1b','1b','2b','2b','3b','3b','4b','4b','5b','5b','6b','6b','7b','7b','8b','8b','9b','9b','0r','1r','1r','2r','2r','3r','3r','4r','4r','5r','5r','6r','6r','7r','7r','8r','8r','9r','9r','0v','1v','1v','2v','2v','3v','3v','4v','4v','5v','5v','6v','6v','7v','7v','8v','8v','9v','9v','0j','1j','1j','2j','2j','3j','3j','4j','4j','5j','5j','6j','6j','7j','7j','8j','8j','9j','9j']
     
            self.talus=[]
            self.affiche()
     
         def affiche(self):
            None
     
         def creation_joueur(self) :
     
        #on renseigfne la classe jouruer du joueur humain
            J1=Joueur('J1','humain')
        #on creer une liste de participant appeler tour
            self.tour =[J1]
    ##        nb_joueur = int(input("Combien de joueurs?"))
            z=1
            n_IA=self.nb_joueur-1 #nb de joueur - l'humain
        #boucle pour renseigner la liste tour et créer les objet de la classe joueur
            while (z<=n_IA) :
                nom_IA='IA'+str(z)
                tour_int=[]
                tour_int.append(nom_IA)
                tour_int=tour_int[0].replace("'","")
                self.tour.append(tour_int[0])
                self.tour[z]=Joueur(nom_IA,"IA")
                z=z+1
     
         def fonction_tour (self):
     
            print (self.tour)
            if (self.tour[0].type_J=='humain'):
                fonction_joueur ()
     
            else :
                fonction_IA ()
    Pouvez vous m'aider s'il vous plait?
    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par nivlem Voir le message
    Pouvez vous m'aider s'il vous plait?
    Si vous voulez de l'aide, il faudrait aussi fournir le code qui permet de le reproduire et expliquer plus précisément en quoi le résultat n'est pas celui que vous attendiez.
    note: si on instancie table et qu'on appelle la méthode .creation_joueur, la variable .tour ne sera pas vide...

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

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2017
    Messages : 43
    Par défaut
    Rebonjour,
    voici le code entier avec des print :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    class Joueur():
         def __init__(self,player_id,type_j):
            """ Notre méthode constructeur """
            self.player_id = player_id
            self.type_j = type_j
            self.main=[]
            self.score = 0
            self.manche_g=0
     
     
     
     
     
     
         def get_type (self):
            return self.type_j
     
         def get_type (self):
            return self.score
         def get_type (self):
            return self.main
     
         def afficher_nom(cls) :
            print(cls.player_id)
     
    class table():
     
     
         def __init__(self, nb_joueur=2): # Notre méthode constructeur
            self.nb_joueur=nb_joueur
            self.tour=[]
     
     
            self.pioche = ['0b','1b','1b','2b','2b','3b','3b','4b','4b','5b','5b','6b','6b','7b','7b','8b','8b','9b','9b','0r','1r','1r','2r','2r','3r','3r','4r','4r','5r','5r','6r','6r','7r','7r','8r','8r','9r','9r','0v','1v','1v','2v','2v','3v','3v','4v','4v','5v','5v','6v','6v','7v','7v','8v','8v','9v','9v','0j','1j','1j','2j','2j','3j','3j','4j','4j','5j','5j','6j','6j','7j','7j','8j','8j','9j','9j']
     
            self.talus=[]
            self.affiche()
     
         def affiche(self):
            None
     
         def creation_joueur(self) :
     
        #on renseigfne la classe jouruer du joueur humain
            J1=Joueur('J1','humain')
        #on creer une liste de participant appeler tour
            self.tour =[J1]
    ##        nb_joueur = int(input("Combien de joueurs?"))
            z=1
            n_IA=self.nb_joueur-1 #nb de joueur - l'humain
        #boucle pour renseigner la liste tour et créer les objet de la classe joueur
            while (z<=n_IA) :
                nom_IA='IA'+str(z)
                tour_int=[]
                tour_int.append(nom_IA)
                tour_int=tour_int[0].replace("'","")
                self.tour.append(tour_int[0])
                self.tour[z]=Joueur(nom_IA,"IA")
                z=z+1
            print (self.tour)
         def fonction_tour (self):
     
            print (self.tour)
            if (self.tour[0].type_J=='humain'):
                fonction_joueur ()
     
            else :
                fonction_IA ()
    a=table()
    a.creation_joueur()
    le print(self.tour) de la méthode creation_joueur indique quelque chose mais le print (self.tour) est une liste vide alors que c'est la même variable qui n'est en aucun cas modifié. Pourquoi devient-elle une liste vide ? Et comment parer ce problème ?
    avez-vous besoin d'autres informations?

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Il y a plein de problème dans votre code.

    Ici :
    Citation Envoyé par nivlem Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         def get_type (self):
            return self.type_j
     
         def get_type (self):
            return self.score
         def get_type (self):
            return self.main
    La fonction get_type, vous voulez quel fasse quoi ? Vous ne pouvez pas avoir 3 fois le même nom de fonction. Elles n'existeront pas toutes les 3, seule 1 seule existera !



    Ensuite (cf commentaire dans le code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            J1=Joueur('J1','humain')
            self.tour =[J1]
            z=1
            n_IA=self.nb_joueur-1 #nb de joueur - l'humain
            while (z<=n_IA) :
                nom_IA='IA'+str(z)
                tour_int=[]
                tour_int.append(nom_IA)                ### donc  tour_int = [nom_IA]
                tour_int=tour_int[0].replace("'","")  
                self.tour.append(tour_int[0])           ### à la premiere iteration, self.tour vaut donc [J1,nom_IA]
                self.tour[z]=Joueur(nom_IA,"IA")     ### et là vous écrasez tous le boulot que vous avez fait pour nom_IA ...
                z=z+1
    Donc cette fonction elle n'est pas claire du tout !

    Enfin la fonction creation_joueur, vous l'appelez à quel endroit ? Il faut l'appeler si vous voulez que le bloc de code qu'elle contient s'éxécute, sinon ce sont des lignes de code mortes !

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par nivlem Voir le message
    le print(self.tour) de la méthode creation_joueur indique quelque chose mais le print (self.tour) est une liste vide alors que c'est la même variable qui n'est en aucun cas modifié. Pourquoi devient-elle une liste vide ?
    .creation_joueur n'étant pas appelé lors de la création de la classe, self.tour sera vide et l'appel à a.fonction_tour() plantera à l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (self.tour[0].type_J=='humain')
    avec in IndexError.

    Citation Envoyé par nivlem Voir le message
    Et comment parer ce problème ?
    avez-vous besoin d'autres informations?
    Si vous écrivez du code, vous devez essayer d'en comprendre la logique par vous même. Ici, la liste est initialisée à vide et si vous ne la remplissez pas en appelant la méthode ad hoc, elle restera vide.
    Normalement, cette logique là c'est quelque chose que vous devez avoir acquis bien avant de vous lancer dans les classes. La seule solution que vous avez est de prendre le temps d'apprendre les bases en travaillant avec un tuto.

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

  6. #6
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Au passage, une petite démonstration de comment générer ta liste avec un générateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    lettres = ('b', 'r', 'v', 'j')
    pioche = [
        str(i)+l for l in lettres 
        for i in range(0, 10)
        for _ in range(1 if i == 0 else 2)
    ]
    Cela nécessite du temps de réfkexion, mais une fois qu'on a compris comment ça marche, ça ouvre de nombreuses possibilités, python arrive parfois à me donner la larme à l'oeil quand je fais ce genre de choses, je dois être trop émotif

  7. #7
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2017
    Messages : 43
    Par défaut
    bonsoir à tous,
    merci de votre aide. Je me suis trompé pour la fin en réécrivant le code : à la place de : c'est : Je l'ai changé dans le message précédant. Avec cela je l'appelle et la liste tour est remplie puis devient vierge comment est possible?
    bonne soirée et bonne continuation

Discussions similaires

  1. Probleme du sac a dos avec des valeurs en Float
    Par ahmadou_20 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 26/08/2014, 13h06
  2. Réponses: 3
    Dernier message: 03/04/2009, 12h39
  3. Réponses: 3
    Dernier message: 31/03/2008, 15h13
  4. Réponses: 3
    Dernier message: 03/10/2006, 23h20
  5. probleme pour recuperer une valeur
    Par kespy13 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/04/2006, 10h18

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