NameError: name '' is not defined

好久不见. 提交于 2019-12-24 14:43:03

问题


I am trying to make a script in Python that will conjugate Spanish verbs. This is my first time scripting with Python, so it may be a simple mistake. When I run the script, I input "yo tener" and receive an error:

Traceback (most recent call last): File "", line 13, in File "", line 1, in NameError: name 'yo' is not defined

  • See more at: 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])
    

回答1:


When you use the eval() function, you're evaluating its arguments as a Python statement. I don't think that's what you want to do...

If you're trying to get the pronoun into the conjugateForm variable, and the verb into the infinitiveVerb variable, just use:

conjugateForm, infinitiveVerb = text.split()

By default, split() splits on whitespace, so the ' ' isn't necessary.




回答2:


Better than to allow the user access to your program's internals is to store the keys as strings as well. Then you don't need eval at all.

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

and similarly

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

Now you can just use the user's inputs as keys into the two dictionaries.

(I don't know if there's a separate tradition for Spanish, but a common arrangement is to list the singular forms first, then the plurals, both in first, second, and third person. You seem to be missing the second and third person plural.)



来源:https://stackoverflow.com/questions/20558934/nameerror-name-is-not-defined

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!