-1

这是我的任务:编写一个解密秘密消息的程序。

它应该首先提示用户输入加扰的字母表。然后它应该询问秘密消息。最后,它输出未加扰的版本。

请注意,加扰字母表正好输入 26 个字符。所有字母字符都被翻译成它们的解码等价物(这将需要一个 WHILE 循环),并且所有其他非字母字符应该完全按照它们在没有翻译的情况下输出。

到目前为止,这是我的代码:

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="")

我似乎无法弄清楚如何使用 while 循环来解扰字母表。

目前,如果我输入“XQHAJDENKLTCBZGUYFWVMIPSOR”作为字母表和“VNKW KW BO 1WV WJHFJV BJWWXEJ!” 作为秘密消息,程序打印出加扰的字母表和一条“未加扰”的消息,内容为“IZTP TP QG 1PI PLNDLI QLPPSJL!”。解密后的消息实际上是“这是我的第一个秘密消息!”

有帮手吗?

4

2 回答 2

3

您映射的方向错误。例如,让我们取第一个字母。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!
于 2013-08-16T19:22:12.963 回答
0

据我所知,您的脚本似乎运行正常。未加密的消息似乎不是“这是我的第一个秘密消息!”

这是我使用您的字母表进行的一些手动翻译:

Key: XQHAJDENKLTCBZGUYFWVMIPSOR
     ABCDEFGHIJKLMNOPQRSTUVWXYZ

Original:   VNKW KW BO 1WV WJHFJV BJWWXEJ!
Translated: IZTP ...

看起来你需要一个不同的例子来测试,或者我可能误解了加扰的执行方式。

于 2013-08-16T19:22:09.510 回答