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

为何BMI判断代码从高阈值向下排序无法正常执行?

问题原因分析

你的代码逻辑错误出在条件判断的方向和顺序不匹配,核心是没搞懂Python if-elif-else的执行规则:它是从上到下依次检查条件,只要某个条件成立,就会执行对应的代码块,后面所有的条件都会被直接跳过,不再验证。

你当前代码的问题

第一个条件写的是if bmi < 35,这意味着所有BMI小于35的数值都会触发这个分支——不管它是28(轻度超重)、22(正常体重)还是17(体重过轻),后面的elif根本没机会执行。比如BMI=28时,因为28<35,会直接输出“you are obese”,这明显不符合BMI的分类规则。

为什么从低阈值向上写能正常工作

当你从18.5开始向上写时,条件是从小到大递增的“小于”判断:

  • 先判断bmi <18.5,满足就输出体重过轻;
  • 不满足的话,说明BMI≥18.5,再判断bmi <25,刚好覆盖18.5~24.9的正常体重区间;
  • 以此类推,每个条件都精准对应一个未被前面覆盖的区间,不会出现提前拦截的情况。

正确的高阈值向下写法

如果想从35这个高阈值开始判断,条件要改成大于等于,让每个分支覆盖从当前阈值到上一个阈值的区间:

height = float(input("enter your height in m: "))
weight = float(input("enter your weight in kg: "))

bmi = round(weight / height ** 2)
if bmi >= 35:
    print(f'Your BMI is {bmi}, you are clinically obese.')
elif bmi >= 30:
    print(f'Your BMI is {bmi}, you are obese.')
elif bmi >= 25:
    print(f'Your BMI is {bmi}, you are slightly overweight')
elif bmi >= 18.5:
    print(f'Your BMI is {bmi}, you have a normal weight')
else:
    print(f'Your BMI is {bmi}, you are underweight ')

这样,BMI≥35的情况会被第一个条件捕获,剩下的数值再依次判断≥30(即30≤BMI<35)、≥25(25≤BMI<30),逻辑完全符合BMI的分类标准。

内容的提问来源于stack exchange,提问作者Joe Faddoul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:05:18