中位数和众数-第12届蓝桥杯选拔赛Python真题精选

导读\]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python**蓝桥杯真题解析100讲》,**这是解读系列的第49讲。 **中位数和众数,**本题是2021年1月23日举办的第12届蓝桥杯青少组Python编程选拔赛真题,题目要求编程对输入的一组数据,分别计算出平均数、中位数和众数。 先来看看题目的要求吧 ### 一.题目说明 **提示信息:** 平均数:是指在一组数据中所有数据之和再除以这组数据的个数。如:"1,2,3,4,5" 这组数的平均数为3.00。(1 + 2 + 3 + 4 + 5) / 5 = 3.00 中位数:将一组数据从大到小排序后,位置在最中间的数值。 分两种情况:当数据个数为奇数时,中位数为中间的那个数的值;当数据个数为偶数时,中位数为中间的两个数的平均值。 如:"1,3,5,7,9 "这组数据有5个数字,中位数为5; "1,3,5,7 "这组数据有4个数字,中位数为4。 众数:是一组数据中出现次数最多的那个数值。 如:"1,3,5,7,9 ,9"这组数据9出现的次数最多,故众数为9。 **编程实现:** 给定一组正整数,然后分行输出这组正整数的平均数,中位数,众数。 **输入描述:** 输入一组正整数并以一个英文逗号隔开 **输出描述:** 第一行输出平均数(保留两位小数) 第二行输出中位数(保留两位小数) 第三行输出众数(如果有多个数值出现的次数相同,则取数值最大的作为众数) **样例输入:** 1,3,5,7,9,9 **样例输出:** 5.67 6.00 9 ### 二.思路分析 这是一道和数学相关的计算题,考查的是平均数、中位数和众数,涉及的知识点主要包循环、列表、排序和函数等。 平均数、中位数和众数这3个数值之间并没有直接关联,因此,我们可以分开处理。 其中,平均数最简单,直接对列表数据求和,再除以列表的长度即可。 中位数是指一组数据中的中间值,即将一组数据按照从小到大(或者从大到小)的顺序排列后,处于中间位置的数,在这组数据中,有一半的数据比中位数大,有一半的数据比中位数小。 这里有两个要点: 1). 需要先对数据进行排序; 2). 数据个数是奇数还是偶数,要分情况讨论,如图: ![图片](https://file.jishuzhan.net/article/1778740991604297730/6cf92525054218dfba152fb0ec406c50.webp) 最后来分析众数,它的情况要复杂一些,众就是多的意思,从字面上就可以想到众数是出现次数最多的数字。 我们可以分两步来计算众数: 1). 统计每个数字出现的次数; 2). 找出出现次数最大的数字; 如下图所示,2出现了两次,其它数字都只出现了一次,所以众数为2: ![图片](https://file.jishuzhan.net/article/1778740991604297730/0bff5d776b9358ec59611ca47da57735.webp) 如果一组数据中出现最多次数的数据有多个,则这几个数据都为众数,众数可以有两个或两个以上,如下图所示: ![图片](https://file.jishuzhan.net/article/1778740991604297730/c83512a53cd25bc18cb01f2777960e2c.webp) 根据题目要求,选择最大的数字作为众数,也就是9。 为了更好地组织代码,可以定义3个函数分别来计算平均值、中位数和众数。 思路有了,接下来,我们就进入具体的编程实现环节。 ### 三.编程实现 根据上面的思路分析,我们分4步来编写程序: * 定义函数计算平均值 * 定义函数计算中位数 * 定义函数计算众数 * 完成主程序 **1. 定义函数计算平均值** 第一步比较简单,定义函数如下: ![图片](https://file.jishuzhan.net/article/1778740991604297730/c533390d53d57b2e935c408faf89010f.webp) 代码非常简单,直接使用Python自带的sum()函数即可,不要傻傻地循环累加了。 **2. 定义函数计算中位数** 根据前面的思路分析,我们定义函数如下: ![图片](https://file.jishuzhan.net/article/1778740991604297730/2c83945d29fe0ee48b0cf06c6ebfb533.webp) 代码不难,说明两点: 1). 在计算idx下标的时候,需要使用整除运算; 2). 列表的下标从0开始,当idx为偶数时,中间的两项下标分别为idx和idx - 1; **3. 定义函数计算众数** 根据思路分析,自定义函数如下: ![图片](https://file.jishuzhan.net/article/1778740991604297730/438f8bf8af45c3ed4bce813f94c73d84.webp) 代码不多,强调三点: 1). 统计某一项在列表中出现的次数,直接调用count()函数即可; 2). 次数最多的数字可能会出现多个,因此这里使用列表来保存,返回的也是列表; 3). 在构造列表的时候,使用了列表推导式的编程技巧,这是一个筛选的过程,通过if语句将满足条件的列表项加入zs列表。 **4. 完成主程序** 有了前面的3个自定义函数,接下来就比较简单了,代码如下: ![图片](https://file.jishuzhan.net/article/1778740991604297730/53fbf7603685d987c468f5163b0fa78b.webp) 代码不多,说明4点: 1). 在获取用户输入的时候,使用了列表推导式,超级好用; 2). 计算中位数之前,需要对列表进行排序,平均数和众数是否排序都不影响; 3). 平均数和中位数的结果是小数,需要保留两位小数,这里使用了f字符串; 4). 众数可能有多个,我们只需要最大的一个,使用max()函数获取即可。 至此,整个程序就全部完成了,你也可以输入不同的数字串来测试效果。 ### 四.总结与思考 本题代码在20行左右,涉及到的知识点包括: * 循环语句,主要for...in循环; * 输入处理,重点是多个数字的连续输入; * 内置函数的使用; * 列表的灵活运用,尤其是列表; * 函数的定义及使用; * 格式化输出; 本题难度中等,难点有两个,一是如何处理有多个众数的情况,二是如何保留两位小数。 针对第一点,我们可以这么来思考,先不管到底要哪一个,先用列表将它们保存起来,作为候选数字,然后再考虑如何从候选数字中选出最大,问题是不是一下子就变简单了。这其实还是计算思维中的分解思维,即将一个复杂问题拆分成多个简单问题。 对于小数精度的控制,通常有如下三种方式: 1). 格式化说明符 2). 格式化字符串 3). round()函数 具体的介绍,可以参考《[计算分数和-第12届蓝桥杯选拔赛Python真题精选](http://mp.weixin.qq.com/s?__biz=Mzg5NDc5MTE4MA==&mid=2247529765&idx=1&sn=de60ab59e5efb8a2d994dbafb5a3389a&chksm=c0180e46f76f8750cb2ed7b49795e90a522634af5ebb781a67c4571dd6db5057ea1b8dd07594&scene=21#wechat_redirect "计算分数和-第12届蓝桥杯选拔赛Python真题精选")》这篇教程,一定要熟练掌握。 超平老师给你留一道思考题,你知道中位数和众数有什么作用吗,通常会用在哪些地方呢? 你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。 如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄 需要源码的,可以移步至"超平的编程课"gzh。

相关推荐
郭庆汝4 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
思则变7 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络8 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find9 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取10 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector12 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习12 小时前
Python入门Day2
开发语言·python
Vertira12 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉12 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗12 小时前
黑马python(二十四)
开发语言·python