【趣味学算法】08 凯撒密码

注: 本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备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
已退出
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值