为何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
相关产品推荐
相关产品推荐

