在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))
答案 0 :(得分: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
功能的开头。