【问题标题】:Decrypting Scrambled Alphabet?解密加扰字母表?
【发布时间】:2013-08-19 06:50:14
【问题描述】:

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

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

请注意,加扰字母表的输入正好是 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!”。解密后的消息实际上是“这是我的第一个秘密消息!”

有帮手吗?

【问题讨论】:

  • 我以为你说你的课程在 2 天后结束,2 天前。你还有作业吗?
  • 是的。 hw 在决赛后的第二天到期。

标签: python list encryption decode scramble


【解决方案1】:

您的映射方向错误。例如,让我们取第一个字母。 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!

【讨论】:

    【解决方案2】:

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

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

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

    您似乎需要一个不同的示例进行测试,或者我可能误解了加扰的执行方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 2015-06-21
      • 2011-04-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多