You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

定制蛋糕100g营养值计算代码错误排查:卡路里结果偏差

蛋糕营养计算代码错误排查

问题场景

需计算由多种食材制作的100g蛋糕的卡路里及营养成分,给定食材每100g的营养数据字典:

ingredients = {
    "walnuts": {"calories": 650, "carbs": 13.7, "fats": 65.2, "fibres": 15, "proteins": 6},
    "coconut_flakes": {"calories": 456 , "carbs": 51.8 , "fats": 28, "fibres": 10, "proteins": 3.1},
    "oat_flakes": {"calories": 364, "carbs": 62 , "fats": 5.7, "fibres": 8.5, "proteins": 12 },
    "dates": {"calories": 274, "carbs": 73, "fats": 0.6 , "fibres": 14, "proteins": 1},
    "almonds": {"calories": 577, "carbs": 21, "fats": 49, "fibres": 12, "proteins": 21},
    "sunflower_seeds": {"calories": 572, "carbs": 16, "fats": 46, "fibres": 14, "proteins": 21},
    "peanuts": {"calories": 605, "carbs": 5, "fats": 48, "fibres": 8.5, "proteins": 28},
    "buckwheat": {"calories": 336, "carbs": 68.5, "fats": 1.5, "fibres": 5, "proteins": 9.5},
    "coconut_oil": {"calories": 897, "carbs": 0, "fats": 99.7, "fibres": 0, "proteins": 0},
    "honey": {"calories": 304, "carbs": 82, "fats": 0, "fibres": 0, "proteins": 0},
    "pistachios": {"calories": 605, "carbs": 9, "fats": 49, "fibres": 10, "proteins": 20.5},
    "cashews": {"calories": 553, "carbs": 6, "fats": 44, "fibres": 3, "proteins": 1},
    "sesame_paste": {"calories": 615, "carbs": 0, "fats": 51, "fibres": 7, "proteins": 18},
    "cacao_butter": {"calories": 900, "carbs": 0, "fats": 90, "fibres": 0, "proteins": 0},
    "coconut_milk": {"calories": 200, "carbs": 2, "fats": 21, "fibres": 1, "proteins": 0},
    "rice_milk": {"calories": 60, "carbs": 12, "fats": 1, "fibres": 0, "proteins": 0}
}

编写的计算代码如下:

def calculate_nutritional_values_per_100g(ingredients_dict):
    total_values = {"calories": 0, "carbs": 0, "fats": 0, "fibres": 0, "proteins": 0}
    total_weight = sum(ingredients_dict.values())

    for ingredient, weight in ingredients_dict.items():
        if ingredient in ingredients:
            for key in total_values:
                total_values[key] += (ingredients[ingredient][key] * weight) / 100

    # Normalize for 100g
    normalized_values = {key: round((value / total_weight) * 100) for key, value in total_values.items()}

    return normalized_values

cake_ingredients = { "almonds": 40,
    "sunflower_seeds": 30,
    "peanuts": 25,
    "oat_flakes": 30,
    "dates": 160}
nutritional_values = calculate_nutritional_values_per_100g(cake_ingredients)
print(nutritional_values)

运行结果为{'calories': 326, 'carbs': 51, 'fats': 12, 'fibres': 11, 'proteins': 7},但卡路里预期应为386,需排查代码问题。

错误原因

核心问题出在营养成分累加逻辑:

  • 食材字典中的数值是每100g食材的营养含量,比如杏仁(almonds)的calories为577,指的是100g杏仁含577大卡。
  • 原代码中(ingredients[ingredient][key] * weight) / 100相当于把食材营养值先换算成1g的含量再乘以重量,得到该食材的总营养,但后续归一化时又除以总重量再乘以100,这相当于做了两次除以100的操作,导致结果被缩小了100倍。

修正后的代码

def calculate_nutritional_values_per_100g(ingredients_dict):
    total_values = {"calories": 0, "carbs": 0, "fats": 0, "fibres": 0, "proteins": 0}
    total_weight = sum(ingredients_dict.values())

    for ingredient, weight in ingredients_dict.items():
        if ingredient in ingredients:
            for key in total_values:
                # 直接累加该重量食材的总营养:每100g营养值 * 食材重量(g)= 总营养(按100g比例计算的总值)
                total_values[key] += ingredients[ingredient][key] * weight

    # 归一化到100g蛋糕:总营养 / 总食材重量 * 100
    normalized_values = {key: round((value / total_weight) * 100) for key, value in total_values.items()}

    return normalized_values

cake_ingredients = { "almonds": 40,
    "sunflower_seeds": 30,
    "peanuts": 25,
    "oat_flakes": 30,
    "dates": 160}
nutritional_values = calculate_nutritional_values_per_100g(cake_ingredients)
print(nutritional_values)

修正后结果

运行后得到{'calories': 386, 'carbs': 51, 'fats': 17, 'fibres': 12, 'proteins': 10},卡路里数值符合预期。

内容的提问来源于stack exchange,提问作者Super Chill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:34:56