dns 部分网站打不开,最经典的营销案例,莱西建设局官方网站,长安高端装备网站设计公司[导读]#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后#xff0c;受到了广大老师和家长的好评#xff0c;非常感谢各位的认可和厚爱。作为回馈#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》#xff0c;这是解读系列的第3讲。
数字处理#xff…
[导读]超平老师的Scratch蓝桥杯真题解读系列在推出之后受到了广大老师和家长的好评非常感谢各位的认可和厚爱。作为回馈超平老师计划推出《Python蓝桥杯真题解析100讲》这是解读系列的第3讲。
数字处理本题是2019年3月24日举行的第10届蓝桥杯青少组Python编程第3题题目要求编程将输入的一组数字进行相应的处理包括统计数字个数、找出最小数字、排序及转成大写字母。
先来看看题目的要求吧。
一.题目说明
编程实现
让用户在一次输入时输入 N 个数字2 N 15即每次输入的数字数量不同数字之间以“,”作为分隔。然后组合显示
1) 用户输入的数字个数
2) 用户输入的最小的数字
3) 将用户输入的数字按从大到小进行排列输出数字之间以“,”作为分隔
4) 如果用户输入的数字小于等于 26则找到相对应的 26 个大写英文字母1 对应“A”26 对应“Z”并拼接在一起打印显示如果输入的数字在 1~26 之外则不显示相应字母。例程序输入 214则显示输“[bad]”。
输入描述
N 个数字2 N 15
输出描述
输入的数字个数
输入的最小数字
输入的数字从大到小排列
输入的数字所对应的字母
样例输入
9,12,15,22,5,21,214
样例输出
7
5
214, 22, 21, 15, 12, 9, 5
ILOVEU[bad]
将程序命名为“lq003”。
评判标准 10 分正确输出用户输入的数字个数 20 分在 10 分标准的基础上正确输出用户输入的最小数字 40 分在 20 分标准的基础上正确地将用户输入的数字按从大到小进行排序输出 50 分完全符合题意即在 40 分标准的基础上正确完成显示数字对应字母的环节。
二.思路分析
这是一道综合性比较强的题目考察的知识点主要是Python系统函数的灵活运用包括字符串处理、列表运算、最值、排序等。
根据题目描述可以将题目的任务分解成如下几个
1). 输入处理
2). 获取列表的个数和最值
3). 列表排序
4). 数字编码
首先我们来讨论任务1-输入处理本题输入的数据是使用逗号隔开的多个数据这里有两个关键点 如何对字符串进行分割 数据类型的转换
Python提供了一个字符串的分割方法-split()用法如下
str.split(str, numstring.count(str))
参数说明如下 str -- 分隔符默认为所有的空字符包括空格、换行(\n)、制表符(\t)等。 num -- 分割次数如果设置了这个参数则最多分割成 num1 个子字符串。默认为 -1即分隔所有。
其返回的结果是字符串列表理解这一点至关重要。
尤其要注意的是我们在终端窗口中输入的是数字但是其类型是字符串。对于如下代码
nums input().split(,)
其结果是字符串列表
[9, 12, 15, 22, 5, 21, 214]
因此还需要进行类型转换处理将字符串转成整型最简单的方法莫过于使用列表推导式了如下
nums [int(x) for x in input().split(,)]
对应的结果如下
[9, 12, 15, 22, 5, 21, 214]
这才是我们要的列表有了列表就可以列表进行各种运算和处理了。
接下来我们来处理任务2 - 获取列表的个数和最值这一步非常简单分别使用len()函数和min()函数即可。
print(len(nums))print(min(nums))
然后是任务3 - 排序题目要求从大到小排序很多同学首先想到的就是sort()方法。不过这里有一个小坑列表的sort()方法是原地排序也就是会改变原列表。
根据题目的描述在第4步中处理的仍然是未排序的列表因此我们要避免原地排序而sorted()函数刚好可以满足我们的需求。
sort 与 sorted 区别如下 sort 是应用在 list 上的方法sorted 可以对所有可迭代的对象进行排序操作。 list 的 sort 方法返回的是对已经存在的列表进行操作而内建函数 sorted 方法返回的是一个新的 list而不是在原来的基础上进行的操作。
最后来看看任务4 - 数字编码将1~26之间的数字按要求转成A ~ Z之间的字符。
对于这个需求可以使用如下两种方案 使用字典 借助ASCII码
方案1就是使用字典将数字和字母的对应关系列出来如下
dict { 1 : A, 2 : B, 3 : C, 4 : D, 5 : E, ......}
然后通过键就可以获取对应的大写字母了。
方案2则是借助ASCII码不过我们需要对ASCII码有所了解如图 其中大写字母A的ASCII码是65根据题意需要将1~26之间的数字加上64然后使用chr()函数将数字转换成相应字符即可。
思路有了接下来我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析我们编写代码如下 简单说明5点
1). 将字符串列表转数字列表时还可以使用map()函数
2). 排序函数默认顺序是从小到可以使用参数reverseTrue实现从大到小
3). 如果不记得sorted()函数也可以使用列表推导式直接通过nums列表得到一个新的列表但是不能直接赋值得到新列表如下
arr nums [x]arr [x for x in nums] [√]
4). 在Python编程中对于范围的判断可以使用数学中的简写方式1 n 26当然你也可以使用 n 1 and n 26的常规写法
5). print()函数默认会换行可以通过end参数设置不换行。
运行程序当输入的内容为9,12,15,22,5,21,214时运行结果如下
75214,22,21,15,12,9,5ILOVEU[bad]
非常完美至此整个程序就全部完成了。
四.总结与思考
本题是中级组编程部分第3题分数为50分代码在10行左右涉及到的知识点包括 输入输出处理 字符串处理包括分割和转换 列表推导式的灵活运用 列表相关函数包括长度和最值 列表排序尤其要注意两种排序的区别
题目难度中等但是代码并不复杂只要考生熟练掌握Python中常见的函数以及列表的相关操作基本上就可以拿满分了。
不知道你发现了没有我在本题中两次提到了列表推导式这是一个非常好用的编程技巧也是Python独有的列表运算一定要熟练掌握真的是太香了。
超平老师给你留一个思考题在前面的分析中提到不能直接通过arr nums得到一个新的数组然后对arr进行排序。如果这么做了结果会怎样为什么会出现这样的结果呢
你有什么好的思路和方法也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助别忘了点赞和转发予人玫瑰手有余香
需要源码的可以移步至“超平的编程课”gzh。