Python 解密加密字母表?
这是我的任务: 写一个解密秘密消息的程序 它应该首先提示用户输入加扰的字母表。然后它应该询问秘密信息。最后,它输出解译后的版本 请注意,对于加扰的字母表,正好输入了26个字符。所有字母字符都将被翻译成它们的解码等价物(这将需要一段时间的循环),所有其他非字母字符的输出应该与没有翻译时完全相同 这是我目前的代码:Python 解密加密字母表?,python,list,encryption,decode,scramble,Python,List,Encryption,Decode,Scramble,这是我的任务: 写一个解密秘密消息的程序 它应该首先提示用户输入加扰的字母表。然后它应该询问秘密信息。最后,它输出解译后的版本 请注意,对于加扰的字母表,正好输入了26个字符。所有字母字符都将被翻译成它们的解码等价物(这将需要一段时间的循环),所有其他非字母字符的输出应该与没有翻译时完全相同 这是我目前的代码: decrypt = ["*"] * 26 scram_alphabet = input("Please input the scrambled alphabet in order: "
decrypt = ["*"] * 26
scram_alphabet = input("Please input the scrambled alphabet in order: ")
while len(scram_alphabet) != 26:
scram_alphabet = input("Please input the scrambled alphabet in order. The alphabet must have 26 characters: ")
num = 0
for each_letter in scram_alphabet:
decrypt[num] = ord(each_letter)
num = num + 1
print()
print()
msg = input("Now input your scrambled message: ")
print()
print()
num = 0
alphabet = [" "] * 26
for letter in range (26):
alphabet[letter] = letter + 65
while num < 26:
alphabet [num] = decrypt [num]
print(chr(alphabet[num]))
num = num + 1
for alpha in msg.upper():
if alpha < "A" or alpha > "Z":
print(alpha,end="")
else:
print(chr(decrypt[ ord(alpha) - 65 ]), end="")
decrypt=[“*”]*26
scram_alphabet=输入(“请按顺序输入加扰的字母:”)
而len(紧急停车字母表)!=26:
scram_alphabet=输入(“请按顺序输入加扰的字母表。字母表必须有26个字符:”)
num=0
对于紧急停堆字母表中的每个字母:
解密[num]=ord(每个字母)
num=num+1
打印()
打印()
msg=input(“现在输入您的加扰消息:”)
打印()
打印()
num=0
字母表=[“”]*26
对于范围(26)内的字母:
字母表[字母]=字母+65
当num<26时:
字母表[num]=解密[num]
打印(chr(字母表[num]))
num=num+1
对于msg.upper()中的alpha:
如果α<“A”或α>“Z”:
打印(alpha,end=“”)
其他:
打印(chr(解密[ord(alpha)-65]),end=“”)
我似乎不知道如何用while循环解字母表
当前,如果我输入“XQHAJDENKLTCBZGUYFWVMIPSOR”作为字母表和“VNKW KW BO 1WV WJHFJV bjwxej!”作为秘密消息,程序打印出加扰字母表和一条“未加扰”消息,内容为“IZTP TP QG 1PI PLNDLI QLPSJL!”。解读的信息实际上是“这是我的第一条秘密信息!”
有任何帮助吗?据我所知,您的脚本运行正常。解读的信息似乎不是“这是我的第一条秘密信息!” 下面是我用你的字母表做的一些手工翻译:
Key: XQHAJDENKLTCBZGUYFWVMIPSOR
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Original: VNKW KW BO 1WV WJHFJV BJWWXEJ!
Translated: IZTP ...
看起来您需要一个不同的示例来测试,或者我误解了加扰是如何执行的。您映射到了错误的方向。例如,让我们看第一个字母。V应该变成T,但为什么 答案是因为V在字母表中占据的位置就是T通常占据的位置。取而代之的是,你在寻找字母表中V所占的位置,并在字母表中替换为I 简而言之,您当前的程序是一个加扰器而不是解扰器,因此您只是在第二次对消息加扰。例如,如果我使用相同的字母表,但提供原始消息,则得到的结果与您提供的加扰消息相同:
Please input the scrambled alphabet in order: 'XQHAJDENKLTCBZGUYFWVMIPSOR'
Now input your scrambled message: 'THIS IS MY 1ST SECRET MESSAGE!'
VNKW KW BO 1WV WJHFJV BJWWXEJ!
这就是问题所在:
decrypt[num] = ord(each_letter)
相反,您需要以相反的方向构建地图:
decrypt[ord(each_letter) - 65] = num + 65
现在,该计划开始运作:
Please input the scrambled alphabet in order: 'XQHAJDENKLTCBZGUYFWVMIPSOR'
Now input your scrambled message: 'VNKW KW BO 1WV WJHFJV BJWWXEJ!'
THIS IS MY 1ST SECRET MESSAGE!
我记得你说过你的课两天后就要结束了,两天前。你还有作业吗?是的。期末考试后第二天到期。