我正在写一个相当简单的文字冒险。一个功能是吃功能,允许你吃你的库存中的对象,并获得饥饿。玩家输入他们想要吃的物品的名称,然后他们获益 饥饿基于物体的食物价值。但它似乎无法发挥作用。
food = ("Bread")
Bread = {"name": "Bread", "foodvalue": 10}
inv = []
inv.append("Bread")
def eat():
global hunger
print(*inv,sep='\n')
print("Eat which item?")
eatitem = input("> ")
if eatitem in food and eatitem in inv:
hunger = hunger + eatitem["foodvalue"]
inv.remove(eatitem)
print("Yum.")
time.sleep(1)
编辑:饥饿每回合下降一次,当达到零时,你会饿死。所以吃东西会增加你的饥饿感。
答案 0 :(得分:1)
您必须将对象放入广告资源(inv
)并使用name
密钥进行查找:
food = ("Bread")
Bread = {"name": "Bread", "foodvalue": 10}
inv = []
# put the object (dict) in the inventory, not the string
inv.append(Bread)
后来:
eatitem = input("> ")
# iterate all items
for item in inv:
# look for item in 'inv'
if item['name'] == eatitem:
# gain item's 'food value'
hunger = hunger + item["foodvalue"]
inv.remove(item)
print("Yum.")
time.sleep(1)
# stop the loop to consume a single item instead of all items
break
正如Hugh Bothwell在评论中所说,如果您需要的是通过它的名字找到食物,您可以使用字典结构,例如:
foods = {"Bread": {"foodvalue": 10, ...}}
在任何键下面都有一份食物清单。
这将使您能够直接访问食物及其属性:
foods['Bread']['foodvalue'] # 10
答案 1 :(得分:0)
eatitem是用户的输入。 “foodvalue”是你词典中的关键词,面包。你想要:
hunger = hunger + Bread["foodvalue"]
答案 2 :(得分:0)
eatitem
是一个字符串('Bread'
),但您希望eatitem成为对象Bread
。有几种方法可以实现(例如,你可以评估用户输入的字符串,但这不是很好。),我在这里概述一个:
food = {"Bread"} # changed to a set
Bread = {"name" : "Bread", "foodvalue" : 10}
items = { "Bread" : Bread }
[...]
def eat()
global hunger
print(*inv,sep='\n')
print("Eat which item?")
eatitem_input = input("> ")
eatitem = items[eatitem_input]
if eatitem in food and eatitem in inv:
hunger = hunger + eatitem["foodvalue"]
inv.remove(eatitem)
print("Yum.")
time.sleep(1)
这仍然可以通过使用类(或者named tuples)来改进。将程序拆分为一个输入/输出部分和一个发动机部分"也是一个好主意。