注: 本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备python语言基础,本人小白,如内容有误感谢您的批评指正
《罗马帝王传》中描述了古罗马恺撒大帝在公元 2 世纪使用的一种加密方法。
它通过将字母按字母表中的顺序后移 3 位起到加密作用,如将字母 A 换作字母 D,将字母 B 换作字母 E,以此类推。
假如有这样一道命令 RETURN TO ROME,在用恺撒的方法加密之后就成为 UHWXUQ WR URPH 这样的密文。
这样即使被敌军截获,也无法从字面上获得有用信息。
在《罗马帝王传》中还说到解密方法:“如果想知道它们的意思,得用第4个字母置换第1个字母,即以D代A,以此类推。”
我们先按照恺撒加密法的规则制成明文和密文字母对照表,如下。
明文字母表: ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表: DEFGHIJKLMNOPQRSTUVWXYZABC
小写字母同理。
接下来让我们编写一段程序实现加密和解密的功能,输入1解密,输入2加密,输入0退出程序
def encrypted():
output = ''
s = input('请输入要解密的密文:')
for c in s:
if 'A'<= c <= 'W' or'a' <= c <= 'w':
output += chr(ord(c)+3)
elif 'X'<= c<= 'Z' or'x' <= c <= 'z':
output += chr(ord(c)-23)
else:
output += c
return output
def decryption():
output = ''
s = input('请输入要加密的名文:')
for c in s:
if 'D'<= c<= 'Z' or'd' <= c <= 'z':
output += chr(ord(c)-3)
elif 'X'<= c<= 'Z' or'x' <= c <= 'z':
output += chr(ord(c)+23)
else:
output += c
return output
if __name__ == '__main__':
while True:
i = input('解密1,加密2,退出0,请输入:')
try:
i = int(i)
except Exception as e:
print('“{}”非法输入请重新操作\n'.format(i))
continue
if i == 1:
print(encrypted())
elif i == 2:
print(decryption())
elif i==0:
print('已退出')
break
else:
print('“{}”非法输入请重新操作'.format(i))
print()
测试结果:
解密1,加密2,退出0,请输入:1
请输入要解密的密文:ilsb
love
解密1,加密2,退出0,请输入:2
请输入要加密的名文:love
ilsb
解密1,加密2,退出0,请输入:3
“3”非法输入请重新操作
解密1,加密2,退出0,请输入:ilsa
“ilsa”非法输入请重新操作
解密1,加密2,退出0,请输入:0
已退出