AttributeError

Résolu/Fermé
Jockill Messages postés 102 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 13 mai 2019 - 17 oct. 2018 à 00:02
 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
A voir également:

1 réponse

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.
1