我已经完成了我应该做的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)
为什么我没有获得print()
s的输出?
答案 0 :(得分:1)
首先,显而易见:这些不是您正在寻找的路径
您的“if Choice”选项错误,因此您可能永远不会执行您期望的路径。您从未强制输入,因此您的if
语句需要if Choice.upper() == 'E':
或更明确地if (Choice == 'E') or (Choice == 'e'):
。我在下面使用这两个。
接下来,您的实际程序:Caesar ciphers ROTATE
您没有遵守凯撒密码的旋转特性。 Ceaser密码就像12小时制。 “11点后4小时”不是“15点”,它是“3点”,在Python中是:(11 + 4) % 12
考虑到这一点,ASCII字符的范围是多少?那里有多少?你是否包括非角色但是印刷品?您是否包含整个有效Unicode 范围? (顺便说一下,包括unicode可能非常接近不可能,因为从页面构建值的性质,以及其他问题。)
所以简单的情况是ASCII值,可打印的字符在32到126之间。(这是参考图表:ASCII Table)
这使我们在有效集合中得到126-32 = 94个字符,类似于12小时制中的12个有效小时。这也意味着我们的最低值是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密码仅使用[AZ]作为有效字符,因此范围为26,底值为65,您必须在Message.upper()
等上执行操作。但原理是相同的。
答案 1 :(得分:0)
我复制了你的代码并用python3运行它;在提示时,我选择了encrypt
,并输入了hello world
的密码消息,对于我使用3
的偏移量,产生的结果为khoor#zruog
。
您的问题可能在第一行,因为我收到了此错误:SyntaxError: EOL while scanning string literal
。问题是你没有正确分割使用2行的字符串;您必须在第一个字符串的末尾使用\
来转义换行符。
如果这不是您的问题,请提及错误消息和python版本。