AttributeError [Résolu/Fermé]

Signaler
Messages postés
102
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
13 mai 2019
-
 grelot -
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
Merci

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

CCM 57030 internautes nous ont dit merci ce mois-ci