字母表中每个字母都有固定的序号,比如,字母a或A排在第1位,字母z或Z排在第26位。设计一个加密算法,将一个全部由字母组成的字符串中的每一个字母对应的序号偏移固定值,生成新的字符串;再用解密算法还原。例如,将字符串"aBcxYz"向右偏移5位加密,得到的新字符串是"fGhcDe"。
def encrypt_decrypt(text, key):
"""加密/解密算法"""
result = list()
for ch in text:
if 'a' <= ch <= 'z': # 偏移小写字母
num_ascii = (ord(ch)-ord('a')+key)%26 + ord('a') # 偏移后新字母的ASCII码值
ch_new = chr(num_ascii) # 加密后的新字母
result.append(ch_new)
elif 'A' <= ch <= 'Z': # 偏移大写字母
num_ascii = (ord(ch)-ord('A')+key)%26 + ord('A') # 偏移后新字母的ASCII码值
ch_new = chr(num_ascii) # 偏移后的新字母
result.append(ch_new)
else:
result.append(ch) # 字母之外的其他字符不变
print(result)
return ''.join(result) # 将list的每一个元素连接成字符串
print(encrypt_decrypt('aBc123xYz',5)) # 显示结果:fGh123cDe
print(encrypt_decrypt('fGh123cDe', -5)) # 显示结果:aBc123xYz
ord()函数:
语法:ord(c)
- 参数:c – 字符。
- 返回值:返回值是对应的十进制整数。
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
chr()函数:
语法:chr(i)
- 参数:i – 可以是10进制也可以是16进制的形式的数字。
- 返回值:返回值是当前整数对应的 ASCII 字符。
chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
List.append()方法
- append() 方法用于在列表末尾添加新的对象。
语法:list.append(obj)
- 参数:obj – 添加到列表末尾的对象。
- 返回值:该方法无返回值,但是会修改原来的列表。
.join()方法
.join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
语法:str.join(sequence)
- 参数:sequence – 要连接的元素序列。
- 返回值:返回通过指定字符连接序列中元素后生成的新字符串。
举例:
str = "-";
seq = ("a", "b", "c"); # 字符串序列
print(str.join( seq ))
输出:
a-b-c