-4

在 python 中编写一个 vigenere 密码,我完全迷失了,有人愿意帮我一把,并提出可以改进/使其正常工作的事情吗?目前我遇到了各种各样的错误

letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
print ("This program will take a keyword, and use it to encrypt plaintext.")
def keyword():
    print ("Please enter your keyword")
    keyword = input()
    return keyword

def plaintext():
    print ("Please enter your plaintext")
    plaintext = input()
    return plaintext

def translate (keyword, plaintext):
    keywordtwo=0
    number=0
    keyword=keyword.upper()
    length = len(plaintext)
    lengthtwo=len(keyword)
    for symbol in plaintext:
        number=letters.find(symbol.upper())
        if number!=-1:
            number+=letters.find
        num%=len(letters)
        if symbol.isupper():
            translated.append(letters[number])
        elif symbol.islower():
            translated.append(letters[number].lower())
        if keywordtwo==len(keyword):
           keywordtwo=0
    else:
        translated.append(symbol)
    return ' '.join(translated)




keyword = keyword()
plaintext = plaintext()
translated = translate(keyword, plaintext)

print ("Your new text is:")
print (translate(keyword, plaintext))
4

1 回答 1

2

TypeError: unsupported operand type(s) for +=: 'int' and 'builtin_function_or_method'指第 22 行的代码:number+=letters.find.

number是一个 int (数字)并且letters.find是一个方法(一个内置方法),并且您正在尝试将它们加在一起。那是行不通的。您可能打算做的是调用该函数,它看起来像number += letters.find(...),其中 ... 代表您要查找的任何字母。

您将得到的下一个错误将类似于UnboundLocalError: local variable 'num' referenced before assignment. 那是在第 23 行:number%=len(letters)num不存在,我假设您的意思是number

然后你会得到NameError: global name 'translated' is not defined,它指的是第 31 行:translated.append(symbol)。您正在尝试将一个项目添加到名为 的列表中translated,但translated此时不存在(您确实在translate函数之外进一步定义了它,但即便如此,您应该使用局部变量,而不是全局变量)。添加translated = []translate函数的开头。

于 2014-12-11T09:57:04.597 回答