我正在做我的 python 作业,但是当我想测试上面的情况时出现错误。
这是我的代码:
def evalTerm(env, t):
if type(t) == Node:
for label in t:
children = t[label]
if label == 'Number':
t = children[0]
return t
elif label == 'Add':
t1 = children[0]
v1 = evalTerm(env, t1)
t2 = children[1]
v2 = evalTerm(env, t2)
return v1 + v2
elif label == 'Multiply':
t1 = children[0]
v1 = evalTerm(env, t1)
t2 = children[1]
v2 = evalTerm(env, t2)
return v1 * v2
elif label == 'Variable':
x = children[0]
if x in env:
return env[x]
else:
print(x + " is unbound")
exit()
elif label == 'Int':
f = children[0]
v = evalTerm[env, f]
if v == 'True':
return 1
elif v == 'False':
return 0
elif label == 'Parens':
x = children[0]
v = evalTerm(env, x)
return v
elif type(f) == Leaf:
if f == 'True':
return 'True'
if f == 'False':
return 'False'
当我使用以下方法测试它时:
evalTerm({}, {'Int': ['True']})
它给出了一个错误:
“function”对象不可下标
我该如何解决它?
如果没有完整的回溯,就不可能肯定地说,但这很可能是你的问题:
v = evalTerm[env, f]
evalTerm
是一个您需要调用的递归函数(请注意附加的()
代替[]
):
v = evalTerm(env, f)
方括号[ ]
在Python中用于订阅 https://docs.python.org/2/reference/expressions.html#subscriptions或索引 - 这意味着,例如寻址 a 中的值字典 https://docs.python.org/2/tutorial/datastructures.html#dictionaries通过它的键,或者a中的一个项目list https://docs.python.org/2/tutorial/introduction.html#lists通过其索引。
如果您遇到异常'foo' object is not subscriptable
这意味着您尝试使用订阅类型的对象'foo'
那不支持它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)