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:
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"),]
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
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)
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
#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'

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
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.
Comment faire en sorte que la reference produit en tant que str soit converti en variable ?


Merci de votre aide,