Python NameError:name' encrypt'没有定义

时间:2016-07-28 08:52:31

标签: python nameerror

当我尝试运行它时,它会说NameError:name' encrypt'没有定义。

MAX_KEY_SIZE = 26
def getMode():
    while True:
           print('Do you wish to encrypt or decrypt a message?')
           mode = input().lower()
           if mode in "encrypt" 'e' 'decrypt' 'd'.split():
                return mode
           else:
                 print('Enter either "encrypt" or "e" or "decrypt" or "d".')

4 个答案:

答案 0 :(得分:2)

根据我对您的代码的理解,'加密'是一个字符串值。您需要创建一个包含所需字符串值的列表,并检查mode变量是否与该列表中的值匹配。

MAX_KEY_SIZE=26
def getMode():
    while True:
        mode=input().lower()
        if mode in ['encrypt','e','decrypt','d']:
            return mode
        else:
            print('Enter either "encrypt" or "e" or "decrypt" or "d".')

如果要使用.split()方法,可以执行以下操作:

if mode in "encrypt e decrypt d".split()

答案 1 :(得分:1)

疑难杂症! input试图评估您的输入(因此,它的名称非常误导)。使用raw_input以字符串格式捕获用户的愿望。

基本上input所做的是raw_input并将其传递给eval:现在您正在尝试评估字符串"加密"作为Python代码,因此它与写入"加密"具有相同的效果。到你的文件。当然,这会导致错误,因为在任何地方都没有引入这样的变量。 evalinput都是非常危险的东西,所以尽量不要使用它们,很少有真正的用例。

有关此网站的这种差异的更多信息: https://stackoverflow.com/a/15129556/308668

答案 2 :(得分:0)

MAX_KEY_SIZE = 26
def getMode(): 
    while True:
        print ('Do you wish to encrypt or decrypt a message?') 
        mode = input().lower()
        if mode in "encrypt" 'e' 'decrypt' 'd'.split():
            return mode 
        else: 
            print('Enter either "encrypt" or "e" or "decrypt" or "d".')

希望这是你的代码..如果是,那么它不应该给出任何错误,你试图获得结果的方法也不会解决你的目的,因为"encrypt" 'e' 'decrypt' 'd'.split()会给你{{ 1}}并且您无法通过正在尝试的“in”方法搜索模式。您可以在列表中搜索模式,如:['encryptedecryptd']“加密”'e''解密''',然后使用“in”方法匹配用户的输入。

希望有所帮助......

答案 3 :(得分:0)

扩展pogo's answer,这是正确的......

让我感到惊讶的是(显然还有很多其他人),if mode in ...:行中的字符串群是而不是语法错误。

if mode in "encrypt" 'e' 'decrypt' 'd'.split():

这些字符串都是编译时常量,因此string literal concatenation在执行开始之前将它们粘合到一个字符串中:

>>> "encrypt" 'e' 'decrypt' 'd'
'encryptedecryptd'

然后在该字符串上调用split()方法,该字符串偶然不包含任何空格。返回值是包含单个字符串的列表:

>>> "encrypt" 'e' 'decrypt' 'd'.split()
['encryptedecryptd']

in运算符不会抱怨给定字符串(mode)和字符串列表,但它会为{{1}的每个值返回False除了一个......没有人可能输入:

mode