Bonjour,
Avant de vous présentez mon soucis voilà quelques infos pour mieux comprendre:
- j'ai commencé le code via python il y a une semaine
- j'ai décidé de faire un mini-jeu RPG textuel pour m'aider a comprendre et maitriser les concepts.
Dans ce jeu, vous êtes un personnage évoluant dans un univers défini et qui possède (entre autres):
- une bourse d'argent
- un inventaire qui se décompense en un inventaire d'équipement et un de consommable soin
Lorsque j'appelle ma "achat", il y a deux grandes étapes:
- une étape qui réduit la valeur de ma bourse
- une étape qui insère l'achat dans mon inventaire (et c'est ici que ça coince)
Pour la suite, nous prendrons l'exemple du "chapeau pointu" qui s'achète chez le tailleur pour 10 sous et qui possède le refcode= "T_1"
J'ai une liste de tuple:
J'ai fait par ailleurs dans un autre module une classe mère "item" avec deux classes filles "equipement" & "consum":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #Create the shop inventory as list of tuple (<name>, <cost>, <refcode in all item>) #Tailor inventaire_tailleur= [ ("Chapeau pointu", 10, "T_l"), ("Casque à pointes", 45,"T_2"),]
mais également j'ai noté l'ensemble de équipement de la sorte:
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 #Item category allowed for check item_category = ["weapon", "taillor", "shoe", "jewel","consum"] #_____________________________________________________________________________________________________________________________ class item: #All kind of item class (that could be equipement or consumable) def __init__(self, item_name, item_type): self.name = item_name self.type = item_type def __check__(self, item_name, item_type): if self.type in item_category: return "{} {}".format(self.name, self.type) else: print("Erreur sur le type de l'item <{}>! Ne peut être que <arme> ou <consum> !".format(self.type)) exit() class equipement(item): #All kind of equipement which are items def __init__( self, item_name, item_type,item_PDV,item_ATK,item_DEF): item.__init__(self, item_name, item_type) item.__check__(self, item_name, item_type) self.PDV = item_PDV self.ATK = item_ATK self.DEFe = item_DEF def __str__(self): return "Equipement: {}. Bonus: {} PDV, {} ATK, {} DEF.".format(self.name, self.PDV,self.ATK, self.DEFe) class consum(item): #All kind of consummable which are items too def __init__(self,item_name, item_type,item_PDV): item.__init__(self, item_name, item_type) item.__check__(self, item_name, item_type) self.PDV = item_PDV def __str__(self): return "Consommable: {} qui vous soignera de {} PDV".format(self.name, self.PDV)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #A) Equipement (name, type, PDV, ATK, DEF) T_1 = equipement("chapeau poitu","taillor", 0, 0,0) T_2 = equipement("casque à pointes","taillor", 0, 0,0)
Mon soucis se situe sur la ligne rouge, de ma fonction "buy_item":
AttributeError: 'str' object has no attribute 'type'
Je comprends bien "item_code" (reference produit) est de type string car retourné du tuple vert alors que "inventory.add" attend une réference produit de type variable tel que défini en orange.
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 def buy_item (joueur,artisan,inventaire_artisan,item_buy): achat=False while not achat: for (produit,price,item_code) in inventaire_artisan: if str.lower(item_buy) == str.lower(produit): answer = input("Confirmez-vous l'achat de {}. Oui/Non: ".format(produit)) if str.lower(answer) == "oui": if joueur._money < price: PNJ.dialogue("Le " + str(artisan),"Je pense que cet article est trop cher pour vous... Ce n'est rien, à bientôt") achat= True break else: print("Vous achetez {} au prix de {} sous !".format(produit,price)) joueur._money = joueur._setmoney(-price) inventory.add_inventory (joueur,item_code) achat= True break else: PNJ.dialogue("Le " + str(artisan),"Ce n'est rien, à bientôt") achat= True break else: PNJ.dialogue("Le " + str(artisan),"Cet objet n'existe pas dans ma boutique !") achat= True break
Comment faire en sorte que la reference produit en tant que str soit converti en variable ?
Merci de votre aide,
Partager