python 实战41 破译密码

题目内容:

A国情报局抓获敌国间谍一名,从间谍身上搜出了若干密电,在严刑逼供之下,间谍说出了密电加密方法:将明文电报(仅由大写字母构成)中的所有字母均替换为字母表中向后看的第n个字母,如果超过Z,则从A继续数,这样就得到了密文,比如ATTACK,向后看第2个字母,就加密为CVVCEM。

可还没等到间谍说出加密用的密钥(数字n),就被卧底开枪打死,间谍临死前在地板上画了BYE三个字母。

情报局长看着一条条密电发了愁,但机智的你已经发现,原来间谍在告诉我们,所有密电的明文都以BYE结尾!

请编写程序破译这些密电吧!

输入格式:

共一行字符串,全部由大写字母构成的密文。

输出格式:

共一行字符串,破译后的明文。

输入样例1:

JNTQZCZF

输出样例1:

IMSPYBYE


My answer
思路:跟着题意一点点弄,不知道是不是正确

pw = input().upper()
bye = 'BYE'
pwlist = [ord(i) for i in pw]
byelist = [ord(i) for i in bye]
newlist = pwlist[-3:]
decodelist = ''
n = newlist[-1] - byelist[-1]

if n < 0:
    n = 26 + n
    for i in pwlist:
        if i - n < 65:
            decodelist += (chr(i-n+26))
        else:
            decodelist += (chr(i - n))
else:
    for i in pwlist:
        if i - n < 65:
            decodelist += (chr(i-n+26))
        else:
            decodelist += (chr(i - n))

print(decodelist)

思路二:穷举

s = input()
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for n in range(26):
	secret = a[n:] + a[:n]
	if a[secret.index(s[-1])] == 'E':
		for t in s:
			print(a[secret.index(t)], end='')
		print()
		break

思路三:计算密钥n

s = input()
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
n = a.index(s[-1])-a.index('E')
for t in s:
	print(a[(a.index(t) - n) % 26], end='')
print()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值