我不明白为什么同样的方法适用于一个函数和字典,它不适用于第二个,即使我只是"复制"它.
allGuests = {"Alice": {"apples": 5, "pretzels": 12}, "Bob": {"ham sandwiches": 3, "apples": 2}, "Carol": {"cups": 3, "apple pies": 1}}
allCalories = {"apples": {"Calories": 100, "fat": 10}, "pretzels": {"Calories": 200, "fat": 20}, "ham sandwiches": {"Calories": 300, "fat": 30}, "cups": {"Calories": 0, "fat": 0}, "apple pies": {"Calories": 500, "fat": 50}}
def totalBrought(guests, item):
numBrought = 0
for k, v in guests.items():
numBrought = numBrought + v.get(item, 0)
return numBrought
def totalCalories(dish, calories):
cal = 0
for k, v in dish.items():
cal = cal + v.get(calories, 0)
return cal
print(" Number of Things being brought: ")
print(" - Apples " + str(totalBrought(allGuests, "apples")))
print(" Calories of apples " + str(totalCalories(allCalories, "apples")))
print(" - Cups " + str(totalBrought(allGuests, "cups")))
print(" - Cakes " + str(totalBrought(allGuests, "cakes")))
print(" - Ham Sandwiches " + str(totalBrought(allGuests, "ham sandwiches")))
print(" - Apple Pies " + str(totalBrought(allGuests, "apple pies")))
Run Code Online (Sandbox Code Playgroud)
(错误的)结果是:
Number of Things being brought:
- Apples 7
Calories of apples 0
- Cups 3
- Cakes 0
- Ham Sandwiches 3
- Apple Pies 1
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释为什么它不起作用?看起来像一个简单的逻辑差距由蟒蛇初学者....提前感谢!
错误在于:
def totalCalories(dish, calories):
cal = 0
for k, v in dish.items():
cal = cal + v.get(calories, 0)
return cal
Run Code Online (Sandbox Code Playgroud)
您可以依次循环遍历每个项目,例如{"Calories": 100, "fat": 10}
,{"Calories": 200, "fat": 20}
依此类推.但是你要查询'apples'
哪些不存在,你继续加0.
你已经掌握了钥匙!您无需dict
再次迭代.这违背了它的目的.
你可以简单地做:
def totalCalories(dish, calories):
return dish[calories]["Calories"]
Run Code Online (Sandbox Code Playgroud)
我相信你错误地命名了你的变量,这让你感到困惑.试试这个:
def totalCalories(calorie_dict, item):
return calorie_dict[item]["Calories"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
163 次 |
最近记录: |