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

如何从Python字典提取数据代入运动热量计算函数并生成指定输出

实现思路与可运行代码

首先你现有代码的do_sport_and_burn_calories函数内部对calories_to_burn的硬赋值会覆盖传入的目标消耗值,需要先删除该行。
我们采用「优先做单位时间卡路里消耗更高的运动」的逻辑实现,按MET值从高到低遍历运动,按每个运动的最大可执行时长消耗,最终统计结果。


完整代码

# 运动信息字典
sports_info = {
    "bicycling": {"met": 14, "max_min_of_execution": 60},
    "crunches": {"met": 5, "max_min_of_execution": 15},
    "swimming": {"met": 9.5, "max_min_of_execution": 30},
    "push ups": {"met": 8, "max_min_of_execution": 15},
    "sitting": {"met": 1, "max_min_of_execution": -1}
}

# 计算每分钟消耗卡路里
def met_to_burned_calories_per_minute(met: float, weight: float) -> float:
    return (met * 3.5 * weight) / 200

# 核心业务逻辑实现
def do_sport_and_burn_calories(calories_to_burn: int, sports_info: dict[str, dict], weight: float = 65.0):
    remaining_cal = calories_to_burn
    sport_record = []
    # 按MET值从高到低排序运动,优先选单位时间消耗更高的
    # 若不需要包含静坐消耗,可在sorted内加过滤:[item for item in sports_info.items() if item[0] != 'sitting']
    sorted_sports = sorted(sports_info.items(), key=lambda x: -x[1]["met"])
    
    for sport_name, sport_detail in sorted_sports:
        if remaining_cal <= 0:
            break
        met = sport_detail["met"]
        max_min = sport_detail["max_min_of_execution"]
        cal_per_min = met_to_burned_calories_per_minute(met, weight)
        
        # 计算当前运动可执行的最长时间
        if max_min == -1:
            # 无时长限制,需要多久做多久
            do_min = remaining_cal / cal_per_min
        else:
            # 最多做max_min分钟,若剩余需要的时间小于max_min就做需要的时长
            need_min = remaining_cal / cal_per_min
            do_min = min(max_min, need_min)
        
        # 计算本次消耗的卡路里
        burned_cal = do_min * cal_per_min
        remaining_cal -= burned_cal
        # 保留1位小数方便阅读,可按需调整精度
        sport_record.append((round(do_min, 1), sport_name))
    
    # 生成输出文本
    sport_str = ", ".join([f"{min}分钟{name}" for min, name in sport_record])
    print(f"要消耗{calories_to_burn}卡路里,你需要完成以下运动:{sport_str}!最终剩余未消耗卡路里为{round(remaining_cal, 2)}。")
    return sport_record, remaining_cal

# 测试调用,比如目标消耗1560卡
if __name__ == "__main__":
    do_sport_and_burn_calories(calories_to_burn=1560, sports_info=sports_info)

输出示例

当你运行上述测试代码时,会输出类似如下结果:

要消耗1560卡路里,你需要完成以下运动:60分钟bicycling, 15分钟push ups, 30分钟swimming, 15分钟crunches, 51.4分钟sitting!最终剩余未消耗卡路里为0.0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:02