最近在Pyhon123 官网 (里面的题目都是基础的,还行吧!可以学一些骚操作!)练习python基础语法的时候,在字符串专项练习里面有一道挺有意思的一道。题目如下:
描述
用户在一行中输入一个包括大小写字母和数字的字符串,编程将其中的大写字母用字母表中该字母后的第5个字母替代,小写字母用字母表中该字母后的第3个字母替代,其他字符原样输出,实现字符串加密。
输入格式
输入一个至少包含一个字母的字符串
输出格式
加密后的字符串
示例 1
输入:Life is short, you need Python!
输出:Qlih lv vkruw, brx qhhg Ubwkrq!
解决:直接上代码,注释也写代码在后面了。
import string
lower = string.ascii_lowercase #生成26个小写
upper = string.ascii_uppercase #生成26个大写
before = string.ascii_letters #小写和大写一起生成
print("lower:",lower)
print("upper:",upper)
print("before:",before)
after = lower[3:] + lower[:3] + upper[5:] + upper[:5]
print("after:",after)
print("取before字符串里面的第一个单词‘a’,看他的ASCII是",ord(before[0]))
print("取after字符串里面的第一个单词‘d’,看他的ASCII是",ord(after[0]))#好让能看出下一行的函数作用是什么。
table = str.maketrans(before, after) #maketrans形成映射,注意 2个字符串长度要相等
print(table)
"""
str.translate(table) 函数使用 table 作为翻译表,对原字符串中的内容进行替换.
"""
sentence = "Life is short, you need Python!" #要加密的句子
result = sentence.translate(table)
#也可以这样写:注意要转化的句子写在前面,映射表写在后面,不然报错
#result = str.translate(sentence,table)
print("加密前的句子:", sentence)
print("加密后的句子:", result)
为了能看懂解题过程,每一步也做了输出!
哈哈,那个 table 映射输出太长啦!塞不下所以省略了
总结:
导入string 模块 为了方便生成26个字母。
关键大小字母字符串 拼接这个要想得到。
调用 str.maketrans() 函数 和 那个 translate()函数,这两个函数要一起使用,前者是转化为映射表,后者 就直接 把要加密的原字符串直接转化为 映射后对应的结果。