KG转LBS单位转换异常求助:转换结果不符合预期
单位转换异常问题分析与修复
核心问题
你的代码存在逻辑分支互斥错误:两个独立的if语句会连续执行。当输入单位是kg时,第一个if完成KG到LBS的转换后,把weight_unit改成了lbs,紧接着第二个if会因为当前单位是lbs,再次执行LBS到KG的转换——等于做了两次反向转换,最终结果自然不符合预期。如果转换系数存在精度差异(比如2.205和1/0.453592不完全等价),还会出现数值偏差(比如你遇到的100kg变成103kg)。
修复方案
把第二个if改成elif,让两个转换分支互斥,同一时间只会执行其中一个:
def calculate_1rm(weight_unit, squat, deadlift, bench_press, reps): try: squat, deadlift, bench_press, reps = float(squat), float(deadlift), float(bench_press), int(reps) except ValueError: return "Invalid input, please enter a number for all lifts" if weight_unit.lower() == "kg": # KG转LBS,转换后更新单位 squat = kg_to_lbs(squat) deadlift = kg_to_lbs(deadlift) bench_press = kg_to_lbs(bench_press) weight_unit = "lbs" elif weight_unit.lower() == "lbs": # LBS转KG,转换后更新单位 squat = lbs_to_kg(squat) deadlift = lbs_to_kg(deadlift) bench_press = lbs_to_kg(bench_press) weight_unit = "kg"
额外建议
确保转换函数使用精确系数,减少浮点误差:
- KG转LBS:
def kg_to_lbs(weight): return weight * 2.20462(2.205是近似值,2.20462更精确) - LBS转KG:
def lbs_to_kg(weight): return weight * 0.453592或weight / 2.20462
内容的提问来源于stack exchange,提问作者Jesus
相关产品推荐
相关产品推荐

