题目内容:
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()