首页 > 解决方案 > 通过用户输入搜索字典

问题描述

我不是 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。似乎无法通过用户输入来搜索字典。

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

标签: pythondictionaryuser-input

解决方案


快速解决办法是做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])

推荐阅读