5.编写一个加密函数,实现对一个给定字符串中的字母转变为其后n个字符,如果遇到超过字母边界,则从最小字母继续计数,连续的数字字符作为一个整数扩大n倍之后替换到对应位置,其中n默认为5。再编写一个解密函数实现对上述加密字符串进行解密。编写测试程序,在测试程序中输入字符串,并输出加密和解密后的字符串。
例如:
字符串str1: avbV125av1, n默认为5
则新的字符串str2: fagA625fa5
import re
def encrypt(str1):
list_2, list_3 = [], []
list_1 = re.findall(r'[^\W\d_]+|\d+', str1) #注释一
for i in list_1:
try:
list_2.append(5 * int(i))
except ValueError:
list_2.append(i) #注释二
for i in list_2:
list_3.append(str(i)) #这个步骤是因为字符串和整数是无法进行join()操作的,所以是整数进行字符串化的操作
list_2.clear()
str1 = ''.join(list_3)
list_3.clear() #注释三
for i in str1:
list_3.append(i)
for i in list_3:
if 65 <= ord(i) <= 90:
s = ord(i) + 5
if s <= 90:
list_2.append(chr(s))
else:
s = s - 90 + 65 - 1
list_2.append(chr(s))
elif 97 <= ord(i) <= 122:
s = ord(i) + 5
if s <= 122:
list_2.append(chr(s))
else:
s = s - 122 + 97 - 1
list_2.append(chr(s))
else:
list_2.append(i)
str2 = ''.join(list_2)
return str2
def decipher(str2):
list_2, list_3 = [], []
list_1 = re.findall(r'[^\W\d_]+|\d+', str2)
for i in list_1:
try:
list_2.append(int(i) // 5)
except ValueError:
list_2.append(i)
for i in list_2:
list_3.append(str(i))
list_2.clear()
str1 = ''.join(list_3)
list_3.clear()
for i in str1:
list_3.append(i)
for i in list_3:
if 65 <= ord(i) <= 90:
s = ord(i) - 5
if s >= 65:
list_2.append(chr(s))
else:
s = 90 - 65 + s + 1
list_2.append(chr(s))
elif 97 <= ord(i) <= 122:
s = ord(i) - 5
if s >= 97:
list_2.append(chr(s))
else:
s = 122 - 97 + s + 1
list_2.append(chr(s))
else:
list_2.append(i)
str2 = ''.join(list_2)
return str2
if __name__ == '__main__':
str1 = (input('Input str1:'))
print('After encrypting:', end='')
print(encrypt(str1))
str2 = encrypt(str1)
print('After deciphering:', end='')
print(decipher(str2))