通过用户输入搜索词典



我不是Python的初学者,但我也不是太有经验。

我正在做一个小项目,想知道什么是最好的行动方案。我想制作一本不同冷冻食品的食物词典,显示每个条目的营养价值。

Food_Catalog_Frozen.py 中的条目示例如下:

Burrito = {
"calories": 310,
"fats": 14,
"sodium": 330,
"carbohydrates": 35,
"sugars": 1,
"protein": 9,
}

然后我想制作一个单独的"什么是烹饪?"脚本,用户输入他们吃的所有东西,所有值都会被添加。

在处理任何分析之前,我想看看我是否可以按原样打印出食物。以下是尝试打印上面墨西哥卷饼营养信息的代码。

import Food_Catalog_Frozen as Frozen
print("What's cookin', good lookin'?n")
STOP = False
while STOP == False:
food = input()  # Enter Burrito
if food == "done":
STOP = True
else:
print(Frozen.food)

并抛出以下错误:

print(Frozen.food)
AttributeError: module 'Food_Catalog_Frozen' has no attribute 'food'

主要问题是可变食物,尽管在这种情况下现在被视为卷饼,但字典仍在搜索Frozen.food而不是Frozen.Burrito。似乎无法通过用户输入搜索词典。

如果有人能说为什么这不起作用,或者是否有更好的方法来做到这一点,将不胜感激。谢谢。

快速的解决方案是做print(getattr(Frozen, food))。这是有效的,因为BurritoFrozen的实际变量(属性(,getattr用于获取属性。但是,我不推荐此解决方案。

最好的方法是重新考虑你的设计。您可以使用顶级dict,而不是使用与可能的食物类型相对应的各个变量:

foods = {
"Burrito": {
"calories": 310,
"fats": 14,
"sodium": 330,
"carbohydrates": 35,
"sugars": 1,
"protein": 9
},
...
}

然后,您将print(Frozen.food)更改为print(Frozen.foods[food])。如果您想确保输入的食物已注册,您可以将print包裹在以下if中:

if food in Frozen.foods:
print(Frozen.foods[food])

当您搜索Frozen.food时,您实际上是在检查冷冻食品目录中名为"食物"的条目。

请注意,这与输入变量food无关。无论食物有什么价值(在你的例子中是"墨西哥卷饼"(,都会查找不存在的 Frozen.food。

相反,您可以做的是使用其他答案建议的顶级字典。

另一种解决方案是定义一个函数,例如目录中的get_food(food_name(。

然后,您可以在主/客户端类中调用get_food(食物(,并获取所需的字典作为输出

相关内容

  • 没有找到相关文章

最新更新