[英]Why does my Python code get an "not defined" error?
If the variable 'key' is returned into the decrypt function, why is it not recognized?如果变量 'key' 返回到解密函数中,为什么不能识别它? The error reads "NameError: global name 'key' is not defined" Here is the code:错误内容为“NameError: global name 'key' is not defined”这是代码:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
alphaList = list(alphabet)
text = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj"
def createKey(aList):
key = []
count = 0
for letter in aList:
if count < 24:
key.append(aList[count + 2])
else:
key.append(aList[count - 24])
count += 1
return key
def decrypt(text):
createKey(alphaList)
decryptedList = []
textList = list(text)
for c in textList:
if c in alphaList:
index = alphaList.index(c)
decryptedList.append(key[index])
else:
decryptedList.append(c)
decryptedText = "".join(decryptedList)
return decryptedText
print decrypt(text)
You never assign key
:你从不分配key
:
createKey(alphaList)
Change this to:将此更改为:
key = createKey(alphaList)
This happens because key
in createKey(alphaList)
is part of the createKey
namescope.这是因为key
在createKey(alphaList)
是的一部分createKey
名称范围。 Although you return it, you don't create that as part of the decrypt
namescope.尽管您返回它,但您不会将其创建为decrypt
名称范围的一部分。
Alternatively, you could use global variables, but I don't recommend this, especially because there is an easy get around by assigning key
in decrypt()
:或者,您可以使用全局变量,但我不建议这样做,特别是因为通过在decrypt()
分配key
可以轻松解决:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
alphaList = list(alphabet)
text = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj"
key = []
def createKey(aList):
global key
# everything else
# no need to return, the `global key` has been changed
def decrypt(text):
global key
createKey(alphaList)
# everything else
References:参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.