NameError:未定义名称''

时间:2013-12-13 04:10:00

标签: python nameerror

我正在尝试用Python创建一个能够结合西班牙语动词的脚本。这是我第一次使用Python编写脚本,所以这可能是一个简单的错误。当我运行脚本时,我输入“yo tener”并收到错误:

  

回溯(最近一次调用最后一次):文件“”,第13行,在文件“”中,   第1行,在NameError中:名称'yo'未定义

  • 详见:http://pythonfiddle.com/#sthash.bqGWCZsu.dpuf

    # Input pronoun and verb for conjugation.
    text = raw_input()
    splitText = text.split(' ')
    conjugateForm = eval(splitText[0]) 
    infinitiveVerb = eval(splitText[1]) 
    
    # Set the pronouns to item values in the list.
    yo = 0
    nosotros = 1
    tu = 2
    el = 3
    ella = 3
    usted = 3
    
    # Conjugations of the verbs.
    tener = ["tengo", "tenemos", "tienes", "tiene", "tienen"]
    ser = ["soy", "somos", "eres", "es", "son"]
    estar = ["estoy", "estamos", "estas", "esta", "estan"]
    
    # List of all of the infinitive verbs being used. Implemented in the following "if" statement.
    infinitiveVerbs = [tener, ser, estar]
    
    # Check to make sure the infinitive is in the dictionary, if so conjugate the verb and print.
    if infinitiveVerb in infinitiveVerbs:
        print("Your conjugated verb is: " + infinitiveVerb[conjugateForm])
    

2 个答案:

答案 0 :(得分:2)

当您使用eval()函数时,您将其参数作为Python语句进行评估。我不认为那是你想做的......

如果您尝试将代词放入conjugateForm变量,将动词放入infinitiveVerb变量,只需使用:

conjugateForm, infinitiveVerb = text.split()

默认情况下,split()会在空格上拆分,因此' '不是必需的。

答案 1 :(得分:1)

比允许用户访问程序内部更好的方法是将密钥存储为字符串。那么你根本不需要eval

pronouns = { "yo": 0, "nosotros": 1, "tu"; 2, "el": 3, "ella": 3, "usted": 3 }

和类似的

verbs = { "tener": [ "tengo", "tenemos", ... ],
    "ser": [ "soy", "somos", ... ],
    ... }

现在您可以将用户的输入用作两个词典中的键。

(我不知道西班牙语是否有单独的传统,但常见的安排是首先列出单数形式,然后是复数形式,包括第一,第二和第三人。你似乎错过了第二个和第三人称复数。)