Python 凯撒密码-Can';我不能工作

Python 凯撒密码-Can';我不能工作,python,caesar-cipher,Python,Caesar Cipher,我已经为我的Python类完成了这个任务,这是我应该做的,但是我似乎无法打印最终结果。任务的目的是创建一个程序,该程序: 允许使用用户选择的偏移量进行加密或解密 然后,它应该获取该信息,并将主题词的字母移动该偏移值,从而得到加密或解密的产品 问题是我的代码不会打印结果,我看不出有什么问题 这是我的密码: Choice = input("Would you like to decrypt or encrypt a message? Please enter 'E' or 'D': ") M

我已经为我的Python类完成了这个任务,这是我应该做的,但是我似乎无法打印最终结果。任务的目的是创建一个程序,该程序:

  • 允许使用用户选择的偏移量进行加密或解密
  • 然后,它应该获取该信息,并将主题词的字母移动该偏移值,从而得到加密或解密的产品
问题是我的代码不会打印结果,我看不出有什么问题

这是我的密码:

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

if Choice == "e".upper():
    for character in Message:
        x = ord(character)
        Encrypt += chr(Offset + x)
    print (Encrypt)
if Choice == "d".upper():
    for character in Message:
        x = ord(character)
        Decrypt += chr(Offset - x)
    print (Decrypt)

为什么我没有得到打印()的输出?

我复制了你的代码并用python3运行了它;当出现提示时,我选择了
encrypt
,并输入了一条密码信息
hello world
,对于偏移量,我使用了
3
,结果是
khoor#zruog

您的问题可能在第一行,因为我遇到了以下错误:
SyntaxError:EOL,在扫描字符串文字时发生了此错误。问题是您没有正确拆分使用两行的字符串;必须在第一个字符串的末尾使用
\
来转义换行符


如果这不是您的问题,请提及错误消息和python版本。

首先,显而易见的是:这些不是您要查找的路径

您的“if Choice”选择是错误的,因此您可能永远不会执行预期的路径。您从未强制输入,因此您的
if
语句需要是
if Choice.upper()==“E”:
或者更明确地说是
if(Choice==“E”)或(Choice==“E”):
。我使用这两个例子如下

接下来,您的实际过程是:凯撒密码旋转

你没有遵守凯撒密码的旋转性质。凯瑟密码就像12小时的时钟。“11点后4小时”不是“15点”,而是“3点”,在Python中是:
(11+4)%12

记住这一点,ASCII字符的范围是多少?有多少人?是否包含非字符但可打印的内容?是否包含整个有效Unicode范围?(顺便说一句,包括unicode可能几乎是不可能的,因为从页面构造值的本质以及其他问题。)

因此,简单的情况是ASCII值,即32到126之间的可打印字符。(这里有一张图表供参考:)

这就给了我们126-32=94个有效字符集,类似于12小时时钟中的12个有效小时。这也意味着我们的底值是32,这意味着任何东西都不能低于该值

我们的密码过程如下所示:

  • 接受用户的转换
  • 从给定值中减去32
  • 按shift值进行调整
  • 通过取移位值模94获得实际移位
  • 加回32
  • 然后,解密过程是反向操作

    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.upper() == 'D':
        print("You didn't think I was going to do all your homework for you, right?")
    

    显然,这可以调整以扩大/缩小输入或输出的有效范围。大多数示例Caesar密码仅使用[A-Z]作为有效字符,因此范围为26,底部值为65,您必须对
    Message.upper()
    等执行操作。但原理相同。

    您使用的python版本是什么,它是否输出任何错误消息?