[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第82讲。
字符串排序,本题是2022年4月17日举办的第13届蓝桥杯青少组Python编程省赛真题编程部分第2题,13届一共举办了两次省赛,这是第一次省赛。题目要求将输入的多个英文单词按字典顺序排序输出。
先来看看题目的要求吧。
一.题目说明
编程实现:
输入多个英文单词(单词都为小写字母),然后按字典顺序排序输出。
单词首字母相同时就比较第二个字母,以此类推。
输入描述:
输入多个由小写仪母组成的英文单词,单词之间以一个英文逗号隔开。
输出描述:
按字典顺序排序输出,且单词之间以一个英文逗号隔开
输入样例:
python, hello, world
输出样例:
hello, python, world
二.思路分析
这是一道简单题,涉及的知识点包括输入输出,排序函数和字符串处理等。
很多同学看到字典序,不知道是什么意思,然后就卡住了,有点可惜了。
字典序到底是什么呢?
字典序,也称为词典序或字母顺序,是指按照字母或字符的自然顺序进行排列的方法。这种排序方式广泛应用于各种场景,比如字符串排序、数据结构排序和文件目录排序等。
在计算机中,字符通常使用ASCII码或Unicode码进行编码,因此字典序的比较实际上是基于这些编码值的比较。
具体的排序规则有如下3条:
1. 首字符优先:
在比较两个字符串时,首先比较它们的第一个字符。如果第一个字符不同,则按照字符编码的顺序确定两个字符串的先后。
2. 逐字符比较:
如果两个字符串的第一个字符相同,则继续比较后面的字符,直到找到不同的字符为止。然后根据该字符的编码值确定两个字符串的排序顺序。
3. 长度考虑:
如果两个字符串在某个位置之前的所有字符都相同,但一个字符串是另一个字符串的前缀,则较短的字符串排在前面,例如,“apple”会排在“apples”前面。
对于英文单词而言,是按照ASCII码进行比较排序的,ACII码表如下:
本题中输入的三个单词为python, hello, world,它们的首字母不同,所以只需要比较一次,根据上图中的ASCII码表,h < p < w,所以排序结果为hello, python, world。
明白了什么是字典序,接下来需要考虑的是如何在编程中实现排序,难道还要自己编写代码?
完全不需要,由于排序是一个常见操作,因此Python内置了排序函数,有如下两个:
-
sort()方法
-
sorted()函数
二者都可以用于排序,但是在使用上有很大的区别,主要有如下3点:
1. 调用方式
sort()是列表对象的方法,必须由列表对象调用,如果是其它可迭代对象,需要转成列表再排序。
而sorted()是一个内置函数,可以对任何可迭代对象进行排序,比如列表、元组、字符串等。
2. 对数据的影响
sort() 是原地排序,也就是说,该方法会对原列表进行修改,不返回新的列表。
而orted()返回一个新的列表,原可迭代对象不受影响,保持不变。
3. 返回值
sort()方法返回值为 None,而sorted()函数返回排序后的新列表。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们分别使用两种方法编写程序如下:
-
sort()方法
-
sorted()函数
1. sort()方法
使用sort()方法的代码如下:
2. sorted()函数
使用sorted()函数的代码如下:
至此,整个程序就全部完成了,你可以输入不同的数据来测试效果啦。
四.总结与思考
本题代码在3行左右,涉及到的知识点包括:
-
输入输出;
-
排序函数;
-
字符串相关函数;
本题代码少,非常简单,基本上也属于送分题,关键有两个,一是要深入理解什么是字典序,其排序规则是怎样的,而是熟练掌握字符串的相关函数。
有些同学因为不知道什么是字典序而放弃了这道题吗,是不是挺遗憾的。
所以说,我们在学习任何知识的时候,一定要注意基本概念的理解,要做到全面深入,而不是一知半解。
这里再补充两个说明,一是关于方法和函数的说法,在编程中,如果某个函数是属于对象的,通常称之为方法,其本质上仍然是函数。
二是Unicode和ASCII的区别和联系。
ASCII是一个包含128个字符的字符编码标准。它主要包括英文字母、数字和一些特殊符号,ASCII 码是最早的字符编码标准,只涵盖了有限的字符集。
Unicode是一个更大的字符编码标准,目的是包含全球范围内的所有字符。Unicode 包括了各种语言(包括中文)的字符、符号、标点以及其他特殊字符,总计支持数十万甚至更多不同字符。
Unicode 是 ASCII 的超集,包含了 ASCII 码中的字符,同时还包含了更多字符,让我们能够表示各种语言和符号。
超平老师给你留一道思考题,如果要按照字典序对输入的多个单词进行降序排序,该如何实现呢?
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要源码的,可以添加本人微信。