中位数和众数-第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). 数据个数是奇数还是偶数,要分情况讨论,如图:

最后来分析众数,它的情况要复杂一些,众就是多的意思,从字面上就可以想到众数是出现次数最多的数字。

我们可以分两步来计算众数:

1). 统计每个数字出现的次数;

2). 找出出现次数最大的数字;

如下图所示,2出现了两次,其它数字都只出现了一次,所以众数为2:

如果一组数据中出现最多次数的数据有多个,则这几个数据都为众数,众数可以有两个或两个以上,如下图所示:

根据题目要求,选择最大的数字作为众数,也就是9。

为了更好地组织代码,可以定义3个函数分别来计算平均值、中位数和众数。

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

三.编程实现

根据上面的思路分析,我们分4步来编写程序:

  • 定义函数计算平均值

  • 定义函数计算中位数

  • 定义函数计算众数

  • 完成主程序

1. 定义函数计算平均值

第一步比较简单,定义函数如下:

代码非常简单,直接使用Python自带的sum()函数即可,不要傻傻地循环累加了。

2. 定义函数计算中位数

根据前面的思路分析,我们定义函数如下:

代码不难,说明两点:

1). 在计算idx下标的时候,需要使用整除运算;

2). 列表的下标从0开始,当idx为偶数时,中间的两项下标分别为idx和idx - 1;

3. 定义函数计算众数

根据思路分析,自定义函数如下:

代码不多,强调三点:

1). 统计某一项在列表中出现的次数,直接调用count()函数即可;

2). 次数最多的数字可能会出现多个,因此这里使用列表来保存,返回的也是列表;

3). 在构造列表的时候,使用了列表推导式的编程技巧,这是一个筛选的过程,通过if语句将满足条件的列表项加入zs列表。

4. 完成主程序

有了前面的3个自定义函数,接下来就比较简单了,代码如下:

代码不多,说明4点:

1). 在获取用户输入的时候,使用了列表推导式,超级好用;

2). 计算中位数之前,需要对列表进行排序,平均数和众数是否排序都不影响;

3). 平均数和中位数的结果是小数,需要保留两位小数,这里使用了f字符串;

4). 众数可能有多个,我们只需要最大的一个,使用max()函数获取即可。

至此,整个程序就全部完成了,你也可以输入不同的数字串来测试效果。

四.总结与思考

本题代码在20行左右,涉及到的知识点包括:

  • 循环语句,主要for...in循环;

  • 输入处理,重点是多个数字的连续输入;

  • 内置函数的使用;

  • 列表的灵活运用,尤其是列表;

  • 函数的定义及使用;

  • 格式化输出;

本题难度中等,难点有两个,一是如何处理有多个众数的情况,二是如何保留两位小数。

针对第一点,我们可以这么来思考,先不管到底要哪一个,先用列表将它们保存起来,作为候选数字,然后再考虑如何从候选数字中选出最大,问题是不是一下子就变简单了。这其实还是计算思维中的分解思维,即将一个复杂问题拆分成多个简单问题。

对于小数精度的控制,通常有如下三种方式:

1). 格式化说明符

2). 格式化字符串

3). round()函数

具体的介绍,可以参考《计算分数和-第12届蓝桥杯选拔赛Python真题精选》这篇教程,一定要熟练掌握。

超平老师给你留一道思考题,你知道中位数和众数有什么作用吗,通常会用在哪些地方呢?

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

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

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

相关推荐
斯凯利.瑞恩7 分钟前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan2019031328 分钟前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁38 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev40 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜1 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习