我正在使用 python 为 ti-84 编写一个程序。它旨在从用户处获取方程,对其进行处理,并为该方程绘制斜率点场。给我带来问题的部分是评估(我知道,安全风险),当我评估方程时,它给我一个错误,“名称‘x’未定义”。仅当在计算器上运行程序时才会出现此错误,当我在计算机上运行该代码段时不会出现此错误。问题是“x”已经被定义了。为什么会出现这种情况?
for pos_x in range(plt.xmin, plt.xmax):
for pos_y in range(plt.ymin, plt.ymax):
x = pos_x-0.25
y = pos_y-0.25
x0 = eval(self.equation)
x += 0.5
x1 = eval(self.equation)
y0 = eval(self.equation)
y += 0.5
y1 = eval(self.equation)
您对
eval
的调用使用当前全局范围作为其计算的表达式的全局 和 本地命名空间。我假设你的循环在一个函数中,这意味着 x
是 not 为传递给 eval
的代码定义的。要解决这个问题,您需要显式地将当前本地范围传递给 eval
:
for pos_x in range(plt.xmin, plt.xmax):
for pos_y in range(plt.ymin, plt.ymax):
x = pos_x-0.25
y = pos_y-0.25
x0 = eval(self.equation, None, locals())
x += 0.5
x1 = eval(self.equation, None, locals())
y0 = eval(self.equation, None, locals())
y += 0.5
y1 = eval(self.equation, None, locals())
(可能)需要显式
None
,因为 eval
不接受关键字参数,并且 eval(self.equation, locals())
会导致 eval
使用本地命名空间作为全局命名空间。