我需要编写python,hacker和wow这样的加密文本,并且使用Python中的Caesar密码,其距离为3,不包括使用raw_input。这是我到目前为止,但我不断收到错误消息,我不知道如何解决它。
>>> plainText = input("python: ")
python: distance = int(input("3: "))
>>> code = ""
>>> for ch in plainText:
ordValue = ord(ch)
cipherValue = ordValue + distance
if cipherValue > ord('z'):
cipherValue = ord('a') = distance - \
(ord('z') - ordValue + 1)
SyntaxError: can't assign to function call
答案 0 :(得分:1)
您似乎将此代码输入到交互式提示中,而不是将其另存为文件并运行它。如果是这种情况,那么当您使用input
时,窗口会提示您输入,然后才能继续输入代码。
plainText = input("python: ")
输入此行后,键入要加密的单词,然后按Enter键。只有这样你才能写下这一行:
distance = int(input("3: "))
你应该在开始下一行code = ""
之前输入你想要的距离。
作为风格提示,我建议将提示文本从"python:"
和"3:"
更改为“要加密的文字:”和“距离:”,这样用户可以明白他的内容是什么应该进入。
接下来,您在此处出现缩进错误:
if cipherValue > ord('z'):
cipherValue = ord('a') = distance - \
if
条件之后的行应缩进一级。
if cipherValue > ord('z'):
cipherValue = ord('a') = distance - \
接下来,这两行有两个问题。
cipherValue = ord('a') = distance - \
(ord('z') - ordValue + 1)
\
之后,您不应该有任何空格。在任何情况下,将整个表达式写在一行上可能会更好,因为该行的长度不足以保证分成两行。-
cipherValue = ord('a') + distance - (ord('z') - ordValue + 1)
此时,您的程序应该运行没有任何错误,但它还没有产生任何输出。在加密每个字符时,将其添加到code
。然后在循环结束后打印它。
plainText = input("text to encrypt: ")
distance = int(input("distance: "))
code = ""
for ch in plainText:
ordValue = ord(ch)
cipherValue = ordValue + distance
if cipherValue > ord('z'):
cipherValue = ord('a') + distance - (ord('z') - ordValue + 1)
code = code + chr(cipherValue)
print(code)
#to do: write this to a file, or whatever else you want to do with it
此处,chr
会将数字cipherValue
转换为等效字母。
结果:
text to encrypt: hacker
distance: 13
unpxre
答案 1 :(得分:0)
你的错误是for
循环的最后一行中的第二个赋值'='。它必须是一个额外的“+”符号。
试试这个:
plainText = input("Enter text to encrypt: ")
distance = int(input("Enter number of offset: "))
code = ""
for ch in plainText:
ordValue = ord(ch)
cipherValue = ordValue + distance
if cipherValue > ord('z'):
cipherValue = ord('a') + distance - \
(ord('z') - ordValue + 1)
code = code + chr(cipherValue)
print(code)
答案 2 :(得分:-1)
您只需要将ordValue从+1更改为+2