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

Python中如何多次处理ValueError异常实现BMI计算器输入循环校验

BMI计算器输入循环校验修复方案

你现有代码的核心问题如下:

  • 自定义的error_handeling函数中weight为局部变量,函数外部无法读取,且该函数仅做了1次异常捕获,用户第二次输入非浮点值仍会触发ValueError报错
  • 体重、身高的数值范围校验逻辑没有嵌套异常捕获,输入非数字内容时程序直接崩溃
  • 体重的校验逻辑和异常捕获逻辑拆分,导致逻辑冗余,你写的if False: break是无效代码不会执行
  • 原BMI判断逻辑存在漏洞:大于18.5就判定为超重不符合通用标准,正常BMI区间应为18.5≤BMI<24

修复后的完整可运行代码如下:

# 通用校验函数:获取符合范围要求的浮点型输入
def get_valid_float(prompt, min_val, max_val, range_error_msg):
    while True:
        try:
            input_val = float(input(prompt))
            if min_val <= input_val <= max_val:
                return input_val
            else:
                print(range_error_msg)
        except ValueError:
            print("输入格式错误,请输入数字")

# 获取合法体重:范围2KG~200KG
weight = get_valid_float("请输入你的体重(单位:KG):", 2, 200, "体重不合法,请输入2~200之间的数值")
# 获取合法身高:范围0.5米~2.2米
height = get_valid_float("请输入你的身高(单位:米):", 0.5, 2.2, "身高不合法,请输入0.5~2.2之间的数值")

BMI = weight / (height ** 2)
print(f"你的BMI值为:{BMI:.2f}")

if BMI < 18.5:
    print("你体重偏轻,建议适当增加营养摄入!")
elif 18.5 <= BMI < 24:
    print("你的体重处于正常范围,继续保持!")
elif 24 <= BMI < 28:
    print("你属于超重范围,建议适当控制饮食、增加运动!")
else:
    print("你属于肥胖范围,建议调整饮食结构,坚持规律运动!")

修复逻辑说明:

  • 封装了通用的输入校验函数,把异常捕获和数值范围校验合并到同一个死循环里,只要输入不合法就一直要求重新输入,直到拿到符合要求的值才返回
  • 修复了原BMI的判断逻辑,符合国内通用的成人BMI判定标准
  • 消除了冗余无效代码,逻辑复用性更高,后续如果需要增加其他数值输入校验,直接调用get_valid_float函数即可

内容的提问来源于stack exchange,提问作者kimanxo 313

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:04