我目前正在开发需要帮助的游戏。 您知道大多数游戏如何具有一种元素,可以像Minecraft一样用已有的东西来制作东西吗? 那就是我要在这里做的:
def craftitem(item):
if item == 'applepie':
try:
inventory.remove('apple')
inventory.remove('apple')
inventory.remove('apple')
inventory.remove('apple')
inventory.append('applepie')
print('Item crafted successfully.')
except ValueError:
print('You do not have the ingredients to craft this.')
这是一个定义。我使用了try命令来实现可能的效果:使用清单中的东西制作其他东西,并将其作为结果添加回去。
并且由于代码是按顺序运行的,这意味着如果某些内容正确运行,则下一个内容将运行。如果有错误,它将不会运行下一件事。这就是问题所在:如果您没有制作所需的原料,它仍然会把您所有的东西从库存中剔除,并且一无所获。
这是我看到的:
工作:
>>>inventory = ['apple','apple','apple','apple']
>>>
>>>craftitem('applepie')
Item crafted successfully.
>>>
>>>>inventory
['applepie']
不起作用:
>>>inventory = ['apple','apple','apple'] #Need one more apple
>>>
>>>craftitem('applepie')
You do not have the indredients to craft this.
>>>
>>>inventory
[]
代码重写,修复或建议受到赞赏。
我是python的新手,才开始一个月前。
答案 0 :(得分:1)
您很快就会意识到,您想使用类来解决这个问题。因此,您的对象将是库存,物料,配方等。
但是要给您实际的小费,您可以尝试通过以下方式进行操作:
recipes = {'applepie': [('apple', 4)],
'appleorangepie': [('apple', 4), ('orange', 2)]}
inventory = {'apple': 8, 'orange': 1}
def craft_item(item):
ingredients = recipes.get(item)
for (name, amount) in ingredients:
if inventory.get(name, 0) < amount:
print('You do not have the ingredients to craft this.')
return
for (name, amount) in ingredients:
inventory[name] -= amount
print('Item crafted successfully.')
craft_item('applepie')
print(inventory)
craft_item('appleorangepie')
print(inventory)
输出:
项目制作成功。
{'苹果':4,'橙色':1}
您没有制作这个的原料。
{'苹果':4,'橙色':1}
答案 1 :(得分:0)
您要做的第一件事是计算库存中所需物品的数量,以查看是否有足够的物品可以制作。例如:
num_apples = sum(item == 'apple' for item in inventory)