英制单位下BMI计算器始终显示肥胖的Bug修复请求
修复英制单位BMI计算始终显示"Obese"的问题
嘿,我看到你在自己开发的BMI计算器里碰到了挺闹心的问题——选英制单位时不管输入啥数值,结果都显示“Obese”。咱们来拆解下问题出在哪,然后把它修好。
问题根源分析
你的代码里有几个关键错误导致了这个异常:
- BMI计算公式完全写错了:英制BMI的正确公式是
(体重lb / (身高in的平方)) × 703,但你写的是BMI = (weight / height * height *703)。按照Python的运算优先级,weight/height*height会先算除法再算乘法,结果等于weight,所以最终BMI的数值变成了体重 ×703,这个数肯定远大于30,直接触发了“Obese”的判断分支。 - 输入提示有误:英制模式下,输入身高的提示写成了
Please enter your weight(in):,这会误导用户把身高数值输成体重,进一步让计算结果偏离正常范围。 - 无效的比较语句:else块里的
Unit == "English"是个比较操作,不是赋值,完全起不到任何作用,属于冗余代码。
修正后的完整代码
print("Body Mass Index Calculator") unit = input("Metric or English?: (enter M or E)") if unit == "M": weight = float(input("Please enter your weight(kg):")) height = float(input("Please enter your height(m):")) bmi = weight / height**2 print("BMI:", bmi) else: weight = float(input("Please enter your weight(lb):")) height = float(input("Please enter your height(in):")) bmi = (weight / height**2) * 703 print("BMI:", bmi) if bmi <= 18.5: print("Underweight") elif 18.5 < bmi <= 24.9: print("Normal weight") elif 25.0 <= bmi <= 29.9: print("Overweight") else: print("Obese")
额外优化说明
我还顺手统一了变量名的大小写(原来Metric模式用大写开头,英制用小写,容易混淆),同时简化了条件判断的写法(比如把BMI>=18.5 and BMI<=24.9改成18.5 < bmi <=24.9,更符合Python的语法习惯),这些都是让代码更易读的小细节。
现在你再运行代码试试,英制单位的计算应该就能正常显示对应的BMI分类啦!
内容的提问来源于stack exchange,提问作者Chris huang
相关产品推荐
相关产品推荐

