Python:将字典与输入结合使用

时间:2015-02-21 00:49:38

标签: python dictionary input

我正在写一个相当简单的文字冒险。一个功能是吃功能,允许你吃你的库存中的对象,并获得饥饿。玩家输入他们想要吃的物品的名称,然后他们获益 饥饿基于物体的食物价值。但它似乎无法发挥作用。

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)

编辑:饥饿每回合下降一次,当达到零时,你会饿死。所以吃东西会增加你的饥饿感。

3 个答案:

答案 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)来改进。将程序拆分为一个输入/输出部分和一个发动机部分"也是一个好主意。