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

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. 先计算身高平方:1.7 ** 2 = 2.89
  2. 用地板除算BMI:75 // 2.89 = 25.0
  3. 逐分支判断:
    • 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:03:26