AttributeError [Résolu]

Messages postés
102
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
13 mai 2019
- - Dernière réponse :  grelot - 17 oct. 2018 à 08:08
Bonjour,
Je viens vous voir car je ne saurais m'expliquer l'erreur :

lancer[quelDe].attributionDe()
AttributeError: 'int' object has no attribute 'attributionDe'

que j'obtiens en faisant tourner ce code :
class De():
    def __init__(self, num, valeur, face, lancerProof):
        self.num = num
        self.valeur = valeur
        self.face = face
        self.lancerProof = lancerProof

    def attributionDe(self):       #Associe un nombre au nom de la face

        self.valeur = random.randint(1,6)

        if (self.lancerProof == 1):
            if (self.valeur == 1):
                self.face = "Crane"
                self.lancerProof = 0
            elif (self.valeur == 2):
                self.face = "Or"
            elif (self.valeur == 3):
                self.face = "Diamant"
            elif (self.valeur == 4):
                self.face = "Epees"
            elif (self.valeur == 5):
                self.face = "Perroquet"
            elif (self.valeur == 6):
                self.face = "Singe"
            else :
                print("Tu as fait couler ton de au fond de l'ocean ...")

...
#Hors de la classe :
combienRelance = int(input("Combien de des veux tu relancer ?"))
for r in range(combienRelance):
     quelDe = (int(input("Quel de veut tu relancer ?")))
     quelDe-=1
     lancer[quelDe].attributionDe()
     print(str(lancer[quelDe].num) + " : " + lancer[quelDe].face)



alors que j'ai plus haut :
for i in range(8):          #initialisation des instances de de.
            lancer=[0]*8
            lancer[i] = De(n,v,f,1)
            lancer[i].attributionDe()
            print(str(lancer[i].num) + " : " + lancer[i].face)
            n+=1

qui fonctionne ...

Est ce que quelqu'un aurait la capacité d'éclairer ma lanterne ?
Merci beaucoup !
Jockill
Afficher la suite 

1 réponse

Meilleure réponse
1
Merci
Bonjour.

Relis ton code

for i in range(8):          #initialisation des instances de de.
            lancer=[0]*8
            lancer[i] = De(n,v,f,1)
            lancer[i].attributionDe()
            print(str(lancer[i].num) + " : " + lancer[i].face)
            n+=1


Tu écrases à chaque tour de boucle ta liste lancer par une liste de 0, ce qui fait que lancer sera au final une liste de 0, sauf le dernier élément, qui sera un objet De.

Pour t'en convaincre, fais des print de ta liste lancer.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 59102 internautes nous ont dit merci ce mois-ci

Commenter la réponse de grelot