我正在做我的第一个编码项目(交互式烹饪书),我遇到了一个障碍,我试图通过在终端输入成分名称(面粉)打印数组的名称(巧克力饼干),我使用python来做这个。这里是我的json文件代码的一个例子:
{
"Recipes": [
"chocolate chip cookie",[
{
"ingredients": "flour"
},
{
"instructions": "Step 1: Preheat Oven to 375"
},
{
"category": "Cookies"
}
]
]
}
下面是我python代码的摘录:
response = input("are you looking for recipes with ingredients on hand (if so please enter 'ingredients') or are you looking for something to cook/bake? (if so please enter 'Cook/Bake')\n")
if response == "ingredients":
print("please enter ingredients")
ingredients = input("enter ingredients separated by commas: ")
ingredients = ingredients.split(",")
for x in ingredients:
import json
#pulling ingredients from cookbook.json(?)
with open('cookbook.json', 'r') as f:
data = json.load(f)
3条答案
按热度按时间plicqrtu1#
最好按如下方式组织数据
最好将只需要执行一次的操作移到代码的顶部
这包括JSON的导入和阅读。
当你在测试程序时,问答模式会让你发疯
在开发过程中使用这种布局会更好。稍后您可以取消对问题的注解。
ru9i0ody2#
您的数据结构对于手头的用途来说相当笨拙。
根据您现有的数据,查找配方名称的过程(可能过于复杂)可能如下所示:
7xllpg7q3#
首先,我建议将json文件的结构更改为,例如:
现在您有了一个名为配方的列表,该列表中的每个项目都是一个配方。
每个配方有4个变量:名称、成分、说明、类别。
这样你就可以循环每个食谱中的每一种成分,看看它们是否匹配。
如果你只想看到第一个结果,在is语句中放一个break。
我还注意到你把import放在for循环里面,请不要这样做,把它放在文件的顶部,以确保它只被导入一次。
另外,不要在for循环中使用**with open()**语句,最好只使用一次,读取数据并将数据保存到变量中:
要回答您的第一个问题: