Python 凯撒密码-Can';我不能工作
我已经为我的Python类完成了这个任务,这是我应该做的,但是我似乎无法打印最终结果。任务的目的是创建一个程序,该程序: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
- 允许使用用户选择的偏移量进行加密或解密
- 然后,它应该获取该信息,并将主题词的字母移动该偏移值,从而得到加密或解密的产品
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版本是什么,它是否输出任何错误消息?