上海市建设安全协会网站孟 侠,医院网站后台模板,网站做视频流量赚钱吗,做翻译 网站吗[导读]#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后#xff0c;受到了广大老师和家长的好评#xff0c;非常感谢各位的认可和厚爱。作为回馈#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》#xff0c;这是解读系列的第29讲。
字符串加密#…
[导读]超平老师的Scratch蓝桥杯真题解读系列在推出之后受到了广大老师和家长的好评非常感谢各位的认可和厚爱。作为回馈超平老师计划推出《Python蓝桥杯真题解析100讲》这是解读系列的第29讲。
字符串加密本题是2020年6月20日举办的第11届蓝桥杯青少组Python编程省赛编程第4题题目要求编程实现加密功能将输入的一段明文按照给定的加密策略输出对应密文。
先来看看题目的要求吧。
一.题目说明
时间限制4000Ms
内存限制589824K3
题目描述
在生活中为保证信息安全我们会把重要的信息进行加密后再发送绘对方对方需要通过相同的策整对信息进行解密才能了解到传递的信息我们一把加密前的信息称为明文把加密后的倌息称为密文。
有这样一种加密的策略第一次加密策略是将明文中字母a加密为01b加密为02c加密为03以此类推x加密为24y加密为25z加密为26空格不加密然后在第一次加密的基础上进行二次加密第二次加密策略是将数字0加密为27数字1加密为28以此类推数字8加密为35数字9加密为36空格则加密为00。
编程实现
请输入一段明文按照上述加密策略输出对应密文。
输入描述
输入一段明文只包含小写字母和空格
输出描述
按照上述加密策略输出对应密文。
样例输入
ab c
样例输出:
27282729002730
评分标准 20分能正确输出一组数据 20分能正确输出两组数据 20分能正确输出三组数据 20分能正确输出四组数据。
二.思路分析
这是一道字符处理题考查的知识点主要包括循环、条件、函数和字符相关知识。
根据题目的描述我们可以将两次加密过程分开讨论 一次加密 二次加密
1.一次加密
第一次加密是将小写字母转成数字串对应关系如下 每个字母都对应一个数字串这是典型的键值对可以使用字典来表示如下 {a:01, b:2, ..., y: 25, z:26 }
使用字典比较简单但是写起来比较麻烦。
实际上我们可以使用ASCII码来简化代码ASCII码对应关系如下 加密时先找到该字母对应的ASCII码再减去a的ASCII码再加上1。
比如b的ASCII码是98先减去97a的ASCII码再加上1结果为2。又如z的ASCII码是122先减去97a的ASCII码再加上1结果为26。
Python编程提供了一个ord()函数用于获取字符的ASCII码如下
# 返回字符的ASCII码ord(c)
返回的数字1~9只有一位的数字需要在前面补上0Python提供了一个非常好用的补全函数如下
str.zfill(width)
将width设置为2就可以确保一位数字前面补0了。
为了方便我们可以定义一个函数对给定的字符进行一次加密返回其数字串。
2. 二次加密
第二次加密是将每一位数字串转成两位数字相对要简单一些。只需要将该数字串转成整型然后加上27再转成字符串就行了。
为了方便我们也将其定义成一个函数对给定数字进行二次加密返回加密后的数字串。
思路有了接下来我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析我们分3步来编写程序 定义函数进行一次加密 定义函数进行二次加密 输出字符串加密结果
1. 定义函数进行一次加密
根据前面的思路分析定义函数如下 传入一个字母就返回加密后的数字串如果是空字符串则直接返回强调两点
1). 对于空字符串的判断最简单的就是直接使用 c 引号里面要打一个空格
2). 对ASCII码进行算术运算后的结果是整数类型需要转成字符串才能调用zfill()方法。
2. 定义函数进行二次加密
根据前面的思路分析定义函数如下 传入一个数字串就返回加密的数字串如果是空字符串则返回00。需要注意要将结果转成成字符串类型以保持统一。
3. 输出字符串加密结果
有了上面的两个加密函数接下来就非常简单了分两次对输入的字符串进行加密处理即可代码如下 代码比较简单需要注意需要将这两次加密分开处理因为第一次加密后每个字符变成两个字符第二次加密是对每个数字进行单独加密处理所以是无法直接叠加处理的。
测试程序输入ab c结果如下 输入yz jqx 效果如下 至此整个程序就全部完成了你也可以输入不同的字符串来测试效果。
四.总结与思考
本题的分数为80分代码在20行左右涉及到的知识点包括 循环语句主要for...in循环 条件语句主要是双分支 函数的定义及使用 ASCII码的转换 类型转换 字符相关函数
题目难度一般关键点是第一次加密过程即如何将小写字母转成两位数字串。这就要求考生对ASCII码的转换比较熟悉ASCII码是我们学习编程的基础必须要熟练掌握。
当然如果实在记不住ASCII码及转换的函数也可以退而求其次使用构建字典的方法来解决只是代码稍微麻烦一点。
超平老师建议在日常学习编程的过程中对于某个问题尽量使用两种以上的方法来实现这样既可以巩固所学知识又可以开阔自己的思路长期坚持下来你肯定会有意想不到的收获。
超平老师给你留一道思考题将ASCII码转成对应字符的函数是哪一个如何使用
你还有什么好的想法和创意吗也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助别忘了点赞和转发予人玫瑰手有余香
需要源码的可以移步至“超平的编程课”gzh。