Python实现BMI计算器时浮点数输入无计算输出问题求助
BMI浮点输入无输出问题修复
你的代码存在两处核心逻辑错误,整数输入时恰好未触发错误路径,才会出现部分输入正常、部分输入无输出的现象:
- 错误1:BMI计算误用地板除
////会将计算结果向下取整丢弃小数部分,不符合BMI计算的精度要求,应替换为普通浮点数除法/。 - 错误2:超重区间判断条件逻辑矛盾
原有超重分支判断为bmivalue <= 25.0 and bmivalue >= 29.9,不存在数值能同时满足小于等于25、大于等于29.9,该分支永远无法命中。按照通用BMI分级标准,超重区间为25.0~29.9,条件应写为bmivalue >= 25.0 and bmivalue <= 29.9。
错误复现验证
你输入体重75kg、身高1.7m时:
- 先计算身高平方:
1.7 ** 2 = 2.89 - 用地板除算BMI:
75 // 2.89 = 25.0 - 逐分支判断:
- 25.0不满足<18.5的偏瘦条件
- 25.0大于24.9,不满足健康体重区间要求
- 无法命中逻辑矛盾的超重分支
- 25.0小于30,不满足肥胖条件
所有分支的print语句都不会执行,程序直接正常退出,因此看不到任何BMI结果输出。
而输入80kg、2m身高时,地板除计算结果为80//(2**2) = 20.0,正好落在18.5~24.9的健康区间,因此可以正常输出,造成「整数输入功能正常」的假象。
修复后可运行代码
# function to calculate bmi and return a result based on user input def calculatebmi(weight, height): # 替换地板除为普通除法,保留计算精度 bmivalue = weight / (height ** 2) if bmivalue < 18.5: print("Underweight") print(bmivalue) elif 18.5 <= bmivalue <= 24.9: print("Healthy") print(bmivalue) # 修正超重区间判断逻辑 elif 25.0 <= bmivalue <= 29.9: print("Overweight") print(bmivalue) elif bmivalue >= 30.0: print("Obese") print(bmivalue) # 获取用户输入并直接转换为浮点型 user_weight_kg = float(input("What is your weight in kilograms? ")) user_height_m = float(input("What is your height in meters? ")) # 执行计算 calculatebmi(user_weight_kg, user_height_m)
修复后再次输入75、1.7,会正确输出BMI值约为25.95,匹配超重分级结果。
内容的提问来源于stack exchange,提问作者ADWrobo
相关产品推荐
相关产品推荐

