[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第35讲。
字符串转码,本题是2020年10月30日举办的第11届蓝桥杯青少组Python编程国赛编程部分第2题,题目要求将给定的字符串中的奇数位转为大写字母,偶数位转成对应的ASCII码。
先来看看题目的要求吧。
一.题目说明
编程实现:
输入一个全部由小写字母组成的字符串(如:abcd),然后将字符串奇数位的小写字母转为大写字母,将偶数位的小写字母转为对应的ASCII码,最后将转化后的结果输出。
输入描述:
输入一个全部由小写字母组成的字符串(如:abcd)
输出描述:
输出转化后的结果
样例输入:
abcd
样例输出:
A98C100
二.思路分析
这是一道简单的字符串运算题,考查的知识点主要包括循环、字符串运算和常见的内置函数。
根据题目的要求,需要对输入的字符串进行遍历,按顺序依次取出每一个字符并处理,按照位置分为两种情况:
-
奇数位:将小写字母转成大写
-
偶数位:将小写字母转成对应的ASCII码
最简单的方法是直接使用Python内置函数,涉及大小写转换的函数有如下两个:
upper(): 将小写字母转为大写
lower(): 将大写字母转为小写
涉及ASCII码的函数有如下两个:
ord(): 获取指定字符的ASCII码
chr(): 获取指定ASCII码的字符
对于本题而言,我们只需要使用upper()和ord()即可。
不过需要注意对于奇数位和偶数位的正确解读,可以结合样例来理解,很显然,第一个字符是奇数位,第二个是偶数位,以此类推。
当然,有同学会有这样的疑问,考试的时候,完全不记得这些内置函数了,怎么办?有没有其他的方法?
这个必须有,使用字典就可以,代码稍微复杂一点,同时需要对ASCII码有所了解,至少要知道字母'a'和‘A’的ASCII码,如图所示:
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们使用两种方法来编写程序:
-
使用内置函数;
-
使用字典;
1. 使用内置函数
根据前面的思路分析,编写代码如下:
代码比较简单,强调3点:
1). Python中的for循环的索引i默认是从0开始的,因此当i为偶数时表示奇数位;
2). upper()方法是对字符或字符串而言的,需要使用对象调用方法的语法;
3). ord()是函数,直接传入参数即可,返回值是数字,需要转成字符串,再进行字符串连接操作。
2. 使用字典
使用字典的思路就是先分别定义好两个字典,一个是小写字母和大写字母对应的字典,一个是小写字母和ASCII码对应的字典,然后直接使用字典进行拼接,我们分3步来实现。
第一步,定义大写字母字典
将小写字母作为键,大写字母作为值,定义字典如下:
第二步,定义ASCII码字典
将小写字母作为键,将ASCII码作为值,定义字典如下:
第三步,循环转换
有了字典,对于任何一个小写字母,我们就可以直接获取其对应的大写字母和ASCII码,编写代码如下:
这部分代码和方法1基本相同,不同的是,在获取大写字母时直接使用字典letter_dict,获取ASCII码时直接使用字典ascii_dict。
输入字母abcd,效果如下:
输入字母abcdefghijk,效果如下:
至此,整个程序就全部完成了,你也可以输入更多的字符串来测试效果。
四.总结与思考
本题核心代码在8行左右,涉及到的知识点包括:
-
循环语句,主要是for...in循环;
-
输入输出函数;
-
条件语句;
-
字符串运算;
-
Pyhton内置函数;
本题比较简单,重点是对upper()方法和ord()函数的熟悉程度,一旦掌握了这两个函数,写代码也就是几分钟的事情了。
退一步来说,在比赛的时候,实在想不起来这些函数,也应该能够找到其它解决方案,比如这里的字典。
两相对比,内置函数实在是太好用了,所以在日常学习Python编程的时候,要多了解并使用Python内置函数,从而提升编程效率。
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香。
需要源码的,可以移步至“超平的编程课”gzh。