所以,我想创造一个游戏。在这个游戏机制中,用户试图使用字典中的一项。
inventory = {
"Health": ["Potion", "Hi-Potion","Elixer"],
"Weapons": ["Blade","Dagger","Staff"],
"Items": ["Glass", "Paper","Notes"],
"Components": ["Rusty Trombone"],
}
# Add and Use item
def add_to_inventory(item_type, item_name):
inventory[item_type].append(item_name)
def use_item():
for item_type, item_name in inventory.items():
print(item_type.title(),":",item_name)
use_item = input("What will you use? \n").title()
if use_item in inventory["Health"]:
position = inventory["Health"].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory["Health"].pop(position)
elif use_item in inventory["Weapons"]:
position = inventory["Weapons"].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory["Weapons"].pop(position)
elif use_item in inventory["Items"]:
position = inventory["Items"].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory["Items"].pop(position)
elif use_item in inventory["Components"]:
position = inventory["Compoents"].index(use_item)
print(f"You've used {use_item}. {use_item} will now be discarded.")
return inventory["Components"].pop(position)
use_item()
有很多冗余,但我很难找到缩短代码的方法。
使用use_item功能,我想首先查看整个库存,以便用户更容易地选择要使用的内容。然后是使用该项的提示。
我希望在将来的情况下,在多个单词项需要首字母大写的情况下,保留所有字符串的title方法。
使用position变量可以获得所用项目的索引位置。这使我能够使用pop方法,不仅从库存中丢弃物品,还可以将该物品退回其预期用途(打开门的钥匙、使用武器、恢复健康、修补)。
所有的机制都还没有编码,但我越看这一部分,就越觉得可以做得更好。但我不知道该怎么做。
我在考虑遍历每个键值对,然后从字典中丢弃该项。但是,我需要pop方法来返回有问题的项(并结束函数)。我遇到了麻烦,因为键有一个列表值。作为一个列表的值使其更容易浏览,但也存在需要进一步迭代的问题——可能是使用嵌套的for循环?但我不知道如何实现这一点来应对这种情况。