凯撒密码查询

时间:2015-11-15 14:29:27

标签: python python-3.5 caesar-cipher

好的,所以在这里,我的代码,它的问题是,当我选择Decrypt选项时,我似乎无法让它恢复到原始形式,我不确定它有什么问题。而且我想知道你们是否可以给我一些关于错误以及我应该做什么的指示? 这是我的代码:

Choice = input("Would you like to decrypt or encrypt a message?\nPlease enter 'E' or 'D': ")
Message = input("Enter text to Cipher: ")
Offset = int(input("Please enter your offset: "))
Encrypt = ''
Decrypt = ''

if (Choice == 'e') or (Choice == 'E'):
    for character in Message:
        x = ord(character) - 32
        Encrypt += chr(((Offset + x) % 94) + 32)
    print(Encrypt)
if (Choice == 'd') or (Choice == 'D'):
    for character in Message:
        x = ord(character) - 32
        Decrypt += chr(((Offset - x) % 94) + 32)
    print(Decrypt)

3 个答案:

答案 0 :(得分:1)

问题在于这一行:

Decrypt += chr(((Offset - x) % 94) + 32)

我不确定你的位置(偏移 - x)来自;您想要反转加密过程所应用的偏移量,因此该行应为:

Decrypt += chr(((x - Offset) % 94) + 32)

您可能希望将加密线调整为对称。

其他一些快速评论:

  • 你可以像这样整理if分支:

    if choice.lower() == 'e':
    elif choice.lower() == 'd':
    

    您可能需要考虑用户输入E或D以外的其他内容的情况。

  • Python样式指南为PEP 8 - 通常,变量名称应为snake_case。类别(CamelCase)和常量(UPPERCASE)例外。

  • 为什么你在使用mod 94或者调整32个位置并不明显。如果您的代码包含解释此行的注释,那将非常有用。

  • 要减少代码重复,您可能希望将偏移代码包装在函数中。然后你可以按如下方式调用它:

    encrypted_message = offset(message, places= 3)
    decrypted_message = offset(message, places=-3)
    

    它还可以通过翻转偏移的符号免费为您提供加密/解密的对称性。

答案 1 :(得分:0)

您应该从

切换减法
Decrypt += chr(((Offset - x) % 94) + 32)

Decrypt += chr(((x - Offset) % 94) + 32)

此外,您应使用if(代表"否则代表")语句,而不是使用第二个elif

elif (Choice == 'd') or (Choice == 'D'):

好好练习。

答案 2 :(得分:0)

你必须写:

    Decrypt += chr((( x -Offset) % 94) + 32)

不是

    Decrypt += chr(((Offset - x) % 94) + 32)