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

相关推荐
算法小白(真小白)2 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
Chinese Red Guest2 小时前
python
开发语言·python·pygame
骑个小蜗牛3 小时前
Python 标准库:string——字符串操作
python
不过四级不改名6773 小时前
蓝桥杯嵌入式备赛教程(1、led,2、lcd,3、key)
stm32·嵌入式硬件·蓝桥杯
TT哇3 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
黄公子学安全5 小时前
Java的基础概念(一)
java·开发语言·python
程序员一诺5 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python