计算BMI指数-第11届蓝桥杯选拔赛Python真题精选

计算BMI指数-第11届蓝桥杯选拔赛Python真题精选_第1张图片

[导读]:超平老师的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指数-第11届蓝桥杯选拔赛Python真题精选_第2张图片

BMI是通过我们人体体重与身高这两个数值来获取的,可有效评判一个人的健康营养状况,其计算公式如下:

计算BMI指数-第11届蓝桥杯选拔赛Python真题精选_第3张图片

需要注意的是,这里的单位,体重是kg,身高是m,并且都是小数。

我们可以将解题过程分成如下3个步骤:

  • 获取输入的体重和身高

  • 计算出BMI指数

  • 输出体重情况

步骤1非常简单,使用input()函数获取输入,并使用float()函数转成小数。

步骤2,需要先按照BMI的计算公式计算出结果,然后再使用round()函数保留一位小数。

步骤3,则根据不同的BMI值输出对应的体重情况,这是一个典型的多分支选择结构,其流程图如下:

计算BMI指数-第11届蓝桥杯选拔赛Python真题精选_第4张图片

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们编写程序如下:

计算BMI指数-第11届蓝桥杯选拔赛Python真题精选_第5张图片

代码比较简单,说明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.14159print("%.1f"%n) // 输出3.1

也可以使用format()函数来进行格式化输出,如下:​​​​​​​

n = 3.14159print("{:.1f}".format(n)) // 输出3.1

但是,上面两种方法都是针对字符串的,如果是数字,最好用的当然是round()函数了。

需要说明的是,上面3种方式都遵循四舍五入的规则。但在实际使用的时候,有一个小坑,它们并不总是进行四舍五入,比如:​​​​​​​

print(round(2.675, 2))2.67

这是为什么呢?

这跟浮点数的精度有关,我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。

那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香

需要源码的,可以移步至“超平的编程课”gzh。

你可能感兴趣的:(蓝桥杯,python,少儿编程竞赛,STEMA测评)