X未定义但x已定义

0 投票
1 回答
59 浏览
提问于 2025-04-12 09:10
import ti_pltlib as plt
class Field:

   self.equation = 2*x+2*y

   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) #Error occurs right here
           x += 0.5
           x1 = eval(self.equation)
           y0 = eval(self.equation)
           y += 0.5
           y1 = eval(self.equation)

我正在用Python为TI-84计算器写一个程序。这个程序的目的是让用户输入一个微分方程,然后处理这个方程,并为它绘制一个斜率点场。

我遇到的问题是eval函数(我知道,这有安全风险)。当我用这个函数来评估方程时,它给我报错,提示“名称'x'未定义”。

这个错误只在计算器上运行程序时出现,而在我电脑上运行那段代码时没有问题。问题是'x'在之前已经定义过了。为什么会这样呢?

更详细的错误信息是:

 'File "<stdin>", line 1, in <module>
 File "FEILD.py", line 45, in <module>
 File "FEILD.py", line 45, in <module>
 File "<string>", line 1, in <module>
 NameError: name 'x' is not defined'

1 个回答

5

要记住,TI-84 计算器运行的是 micropython(其实是 circuitpython),而MicroPython 不是 Python。在这两种语言中写代码时,你需要了解它们之间的区别。在这个情况下,你遇到的问题是eval() 在 micropython 中无法访问局部变量

MicroPython 不维护符号局部环境,它被优化为一个插槽数组。因此,局部变量不能通过名称访问。实际上,MicroPython 中的 eval(expr) 相当于 eval(expr, globals(), globals())。

那份完整文档值得一读;它讨论了 CPython(也就是“常规 Python”)和 MicroPython 之间的许多区别。

撰写回答