中位数和众数-第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。

相关推荐
叫我DPT6 分钟前
分享一个python启动文件脚本(django示例)
数据库·python·django
_玖-幽11 分钟前
大数据分析02 基础语法差异
python·数据分析·go
coder777712 分钟前
js逆向分享
javascript·爬虫·python·算法·安全
QQ_77813297419 分钟前
从文本到视频:基于扩散模型的AI生成系统全解析(附PyTorch实现)
人工智能·pytorch·python
明月看潮生39 分钟前
青少年编程与数学 02-016 Python数据结构与算法 25课题、量子算法
python·算法·青少年编程·量子计算·编程与数学
水w41 分钟前
【Python爬虫】详细入门指南
开发语言·爬虫·python·scrapy·beautifulsoup
weixin_445054721 小时前
力扣刷题-热题100题-第35题(c++、python)
c++·python·leetcode
_x_w2 小时前
【17】数据结构之图及图的存储篇章
数据结构·python·算法·链表·排序算法·图论
pianmian12 小时前
arcgis几何与游标(1)
开发语言·python
冬天vs不冷2 小时前
SpringBoot条件注解全解析:核心作用与使用场景详解
java·spring boot·python