[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第19讲。
计算BMI指数,本题是2020年1月12日举办的第11届蓝桥杯青少组Python编程选拔赛真题,题目要求编写程序计算用户的BMI指数并输出其对应的体重情况。
先来看看题目的要求吧。
提示信息:
身体体重指数(BMI)是国际上常用的衡量人体肥胖程度和是否健康的重要标准。
BMI 指数 = 体重(kg)÷ 身高(m)的平方
BMI 指数在不同数值范围,其对应的体重情况分别是:
过轻:低于18.5
正常:18.5~23.9
过重:24~26.9
肥胖:27~32
非常肥胖:高于 32
编程实现:
分别输入用户的身高(单位米,最多输入两位小数)和体重(单位千克,至多一位小数),根据上述公式计算 BMI指数(保留一位小数),并输出其对应的体重情况。
样例输入:
61
1.70
样例输出:
您的BMI指数为:21.1 您的体重情况:正常
评判标准:
下列各评分项单独计分,得分累加,共25个计分点。
5分:能正确接收输入的体重和身高;
11分:能够正确的输出计算出的结果,包含 BMI指数和体重情况;
9分:能路正确的按格式输入及输出,完全符合样例要求。
这是一道经典的计算题,考查的知识点包括浮点数的处理和多分支条件结构。
所谓BMI,是Body Mass Index的缩写,即身体质量指数,是国际上常用的衡量人体肥胖程度的重要标准。
BMI是通过我们人体体重与身高这两个数值来获取的,可有效评判一个人的健康营养状况,其计算公式如下:
需要注意的是,这里的单位,体重是kg,身高是m,并且都是小数。
我们可以将解题过程分成如下3个步骤:
获取输入的体重和身高
计算出BMI指数
输出体重情况
步骤1非常简单,使用input()函数获取输入,并使用float()函数转成小数。
步骤2,需要先按照BMI的计算公式计算出结果,然后再使用round()函数保留一位小数。
步骤3,则根据不同的BMI值输出对应的体重情况,这是一个典型的多分支选择结构,其流程图如下:
思路有了,接下来,我们就进入具体的编程实现环节。
根据上面的思路分析,我们编写程序如下:
代码比较简单,说明3点:
1). 由于体重和身高都是小数,必须使用float()函数进行转换;
2). 在Python编程中,可以使用round(x,n)函数,其作用是返回浮点数x的四舍五入值,保留n位小数;
3). 在多分支条件判断时,只需要判断单边条件,不需要双边条件(如 18.5 <= bmi <= 23.9)。
输入题目中的样例数据,结果如下:
至此,整个程序就全部完成了,你也可以输入不同的体重和身高来测试效果。
本题的分数为25分,代码在16行左右,涉及到的知识点包括:
输入和输出;
小数的处理;
多分支选择结构;
题目难度一般,计算BMI指数是学习多分支条件结构的经典案例,只要掌握了if...elif...else语句的基本用法,基本上就可以拿下这道题了。
还有一点需要注意,就是小数(也叫浮点数)的灵活处理。在Python编程中,在使用print()函数输出小数的时候,最常用的是格式化输出方式,如下:
n = 3.14159
print("%.1f"%n) // 输出3.1
也可以使用format()函数来进行格式化输出,如下:
n = 3.14159
print("{:.1f}".format(n)) // 输出3.1
但是,上面两种方法都是针对字符串的,如果是数字,最好用的当然是round()函数了。
需要说明的是,上面3种方式都遵循四舍五入的规则。但在实际使用的时候,有一个小坑,它们并不总是进行四舍五入,比如:
print(round(2.675, 2))
2.67
这是为什么呢?
这跟浮点数的精度有关,我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。
那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香
需要源码的,可以移步至“超平的编程课”gzh。