为什么我的函数没有被完全打印出来?
Why is my function not being printed entirely?
所以我在 Stack Overflow 用户的帮助下制作了这个功能,这里是..
def totalcal(data):
calorie_dict = {}
for el in data:
food, values = el.split(':')
a, b, c = values.split(',')
calories = (int(a) * 5) + (int(b) * 5) + (int(c) * 9)
calorie_dict[food] = calories
return calorie_dict
def rdict(recipes):
recipes_splitted = {}
for r in recipes:
recipe_name, parts = r.split(":")
recipe_parts = {}
for part in parts.split(','):
product, number = part.split('*')
recipe_parts[product] = int(number)
recipes_splitted[recipe_name] = recipe_parts
return recipes_splitted
def recipecal(recipes, data):
for recipe_name in rdict(recipes):
recipe_parts = rdict(recipes)[recipe_name]
calories = 0
for product in recipe_parts:
number = recipe_parts[product]
calories += number * totalcal(data)[product]
return calories
print(recipecal(["Pork Stew:Cabbage*5,Carrot*1,Fatty Pork*10",
"Green Salad1:Cabbage*10,Carrot*2,Pineapple*5",
"T-Bone:Carrot*2,Steak Meat*1"]
,["Cabbage:4,2,0", "Carrot:9,1,5", "Fatty Pork:431,1,5",
"Pineapple:7,1,0", "Steak Meat:5,20,10", "Rabbit Meat:7,2,20"]))
此函数有效,但是,对于 recipecal(recipes, data)
只有列表中第一个输入的解决方案被打印出来,就像输出只是这样...
22295
这是 ["Pork Stew:Cabbage*5,Carrot*1,Fatty Pork*10",
的结果,但我的代码忽略了列表中的其余输入。我应该在这里更改什么才能使其工作?
您在 for recipe_name in rdict(recipes):
循环中有一个 return 语句,因此它将在循环之前 return 并且永远不会到达其他元素。通过将 calories = 0
和 return calories
移出循环来修复它。
def recipecal(recipes, data):
calories = 0
for recipe_name in rdict(recipes):
recipe_parts = rdict(recipes)[recipe_name]
for product in recipe_parts:
number = recipe_parts[product]
calories += number * totalcal(data)[product]
return calories
return calories
的执行太早,因为它在循环内,因此也完成了循环,这就是其他条目未被处理的原因。
解决方法是将其放在内部循环之外。
在这种情况下,return calories 只打印最后一个条目,这不是您想要的。
所以最终的解决方案是创建一个列表来存储每个食谱的卡路里和 return 该列表。
编辑应该是这样的
def recipecal(recipes, data):
calories_list = []
for recipe_name in rdict(recipes):
recipe_parts = rdict(recipes)[recipe_name]
calories = 0
for product in recipe_parts:
number = recipe_parts[product]
calories += number * totalcal(data)[product]
calories_list.append(calories)
return calories_list
输出
[22295, 690, 405]
如果你想要所有卡路里的总和,那么只需使用 sum(list)
所以我在 Stack Overflow 用户的帮助下制作了这个功能,这里是..
def totalcal(data):
calorie_dict = {}
for el in data:
food, values = el.split(':')
a, b, c = values.split(',')
calories = (int(a) * 5) + (int(b) * 5) + (int(c) * 9)
calorie_dict[food] = calories
return calorie_dict
def rdict(recipes):
recipes_splitted = {}
for r in recipes:
recipe_name, parts = r.split(":")
recipe_parts = {}
for part in parts.split(','):
product, number = part.split('*')
recipe_parts[product] = int(number)
recipes_splitted[recipe_name] = recipe_parts
return recipes_splitted
def recipecal(recipes, data):
for recipe_name in rdict(recipes):
recipe_parts = rdict(recipes)[recipe_name]
calories = 0
for product in recipe_parts:
number = recipe_parts[product]
calories += number * totalcal(data)[product]
return calories
print(recipecal(["Pork Stew:Cabbage*5,Carrot*1,Fatty Pork*10",
"Green Salad1:Cabbage*10,Carrot*2,Pineapple*5",
"T-Bone:Carrot*2,Steak Meat*1"]
,["Cabbage:4,2,0", "Carrot:9,1,5", "Fatty Pork:431,1,5",
"Pineapple:7,1,0", "Steak Meat:5,20,10", "Rabbit Meat:7,2,20"]))
此函数有效,但是,对于 recipecal(recipes, data)
只有列表中第一个输入的解决方案被打印出来,就像输出只是这样...
22295
这是 ["Pork Stew:Cabbage*5,Carrot*1,Fatty Pork*10",
的结果,但我的代码忽略了列表中的其余输入。我应该在这里更改什么才能使其工作?
您在 for recipe_name in rdict(recipes):
循环中有一个 return 语句,因此它将在循环之前 return 并且永远不会到达其他元素。通过将 calories = 0
和 return calories
移出循环来修复它。
def recipecal(recipes, data):
calories = 0
for recipe_name in rdict(recipes):
recipe_parts = rdict(recipes)[recipe_name]
for product in recipe_parts:
number = recipe_parts[product]
calories += number * totalcal(data)[product]
return calories
return calories
的执行太早,因为它在循环内,因此也完成了循环,这就是其他条目未被处理的原因。
解决方法是将其放在内部循环之外。 在这种情况下,return calories 只打印最后一个条目,这不是您想要的。
所以最终的解决方案是创建一个列表来存储每个食谱的卡路里和 return 该列表。
编辑应该是这样的
def recipecal(recipes, data):
calories_list = []
for recipe_name in rdict(recipes):
recipe_parts = rdict(recipes)[recipe_name]
calories = 0
for product in recipe_parts:
number = recipe_parts[product]
calories += number * totalcal(data)[product]
calories_list.append(calories)
return calories_list
输出
[22295, 690, 405]
如果你想要所有卡路里的总和,那么只需使用 sum(list)