python中的Vigenere密码[关闭]
Posted
技术标签:
【中文标题】python中的Vigenere密码[关闭]【英文标题】:Vigenere cipher in python [closed] 【发布时间】:2014-12-11 09:38:41 【问题描述】:在 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))
【问题讨论】:
你得到什么样的错误? TypeError: unsupported operand type(s) for +=: 'int' and 'builtin_function_or_method' 是最新的@PieterWitvoet number+=letters.find 似乎不正确,您必须传递一个参数才能找到 阅读一些文献以改善您的编码风格可能也值得一读。你的程序很混乱,读者很难理解。这是一项极其重要的技能,最好尽早学习。 【参考方案1】: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
函数的开头。
【讨论】:
以上是关于python中的Vigenere密码[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Python中的Vigenere密码不适用于大写/小写字母转换
vigenere密码中的itertools循环导致空间问题python