如何使用Python实现健身周里程积分的梯度累进计算
健身可穿戴设备周里程积分计算代码修复
原代码存在的核心问题
- 区间判断逻辑完全错误:原代码使用
0 > distance < 32这类链式判断,等价于要求同时满足0>distance和distance<32,只有输入负里程才会进入第一个分支,完全不符合区间匹配的需求,且遗漏了32km、40km、48km三个边界值的判断 - 累进计分规则实现错误:梯度累进要求仅对落在对应区间的超出里程计分,原代码直接用总里程乘区间单价,计算结果完全不符合规则
- 函数结构不合理:函数定义了入参但内部又重复获取输入,套了无退出条件的死循环,且没有返回值,调用后会额外打印None
积分计算逻辑梳理
梯度计分按区间分段累加,各段固定积分数值提前明确:
- 周里程≤32km:积分为0
- 32km<里程≤40km:超出32km的部分每km计325分,该区间满额(跑满40km)可拿8*325=2600分
- 40km<里程≤48km:超出40km的部分每km计550分,该区间满额(跑满48km)可拿8*550=4400分,累计总积分7000分
- 里程>48km:超出48km的部分每km计600分
修正后可运行代码
def calculate_fitness_points(distance): if distance < 0: raise ValueError("里程数值不能为负") # 第一区间:0-32km if distance <= 32: return 0 # 第二区间:33-40km if distance <= 40: return (distance - 32) * 325 # 前两区间满额积分2600,计算第三区间:41-48km section2_full = 8 * 325 if distance <= 48: return section2_full + (distance - 40) * 550 # 前三区间满额积分7000,计算第四区间:48km以上 section3_full = 8 * 550 return section2_full + section3_full + (distance - 48) * 600 if __name__ == "__main__": while True: user_input = input("请输入周里程(单位:Km,输入q退出程序):") if user_input.lower() == "q": break try: distance = int(user_input) points = calculate_fitness_points(distance) print(f"对应健身积分:{points}") except ValueError: print("输入无效,请输入正整数里程值,或输入q退出")
结果验证
输入不同里程的计算结果如下:
- 输入32 → 输出0,符合规则
- 输入40 → 输出2600,符合规则
- 输入48 → 输出7000,符合规则
- 输入50 → 输出8200,符合规则
内容的提问来源于stack exchange,提问作者riko chua
相关产品推荐
相关产品推荐

