我正在尝试用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])
答案 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", ... ],
... }
现在您可以将用户的输入用作两个词典中的键。
(我不知道西班牙语是否有单独的传统,但常见的安排是首先列出单数形式,然后是复数形式,包括第一,第二和第三人。你似乎错过了第二个和第三人称复数。)