凯撒密码加密

时间:2014-02-10 12:32:39

标签: python encryption

我需要编写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

3 个答案:

答案 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