简体   繁体   English

为什么我的 Python 代码会出现“未定义”错误?

[英]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.这是因为keycreateKey(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM