python - 通过用户输入搜索字典
问题描述
我不是 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))
。这将起作用,因为Burrito
它是 的实际变量(属性)Frozen
,并且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])
推荐阅读
- scala - 我无法从 Jupyter 运行 scala
- java - 调用 setText() 时 JavaFX 文本不会改变
- javascript - 反应原生 TextInput
- python - 使用python for循环获取具有值的json对象
- python - 有没有办法通过使用导入的 csv 中的字符串来生成列表名称?
- ios - IOS Webkit 跟踪被点击的 url 和 URL Scheme
- java - 为什么 Java 9 中不推荐使用 finalize() 方法?
- java - 为什么我的服务无法在 Android Pie 上运行
- ios - Obj-c - 对字典中的数组进行排序?
- php - 包裹在字符串中的 PHP WPML 字符串翻译