Sympy突然无法识别varialbe

时间:2019-11-23 19:48:24

标签: python sympy

昨晚我写了一些代码,一切正常。今天不会:

sigma = symbols('x1:4')
D = [1]
for d in D:
    for s in sigma:
        D.append(s*d)
    if len(D) > 20:
        break
print(D)
print(D[19].subs([(x1,4),(x2,2),(x3,3)]))

这个,实际上我写的定义符号xi(i是自然数)的任何东西都会返回 一个错误。对于上面的代码,我得到:

>>> for d in D:
...     for s in sigma:
...         D.append(s*d)
...     if len(D) > 20:
...         break
... 
>>> print(D)
[1, x1, x2, x3, x1**2, x1*x2, x1*x3, x1*x2, x2**2, x2*x3, x1*x3, x2*x3, x3**2, x1**3, x1**2*x2, x1**2*x3, x1**2*x2, x1*x2**2, x1*x2*x3, x1**2*x3, x1*x2*x3, x1*x3**2]
>>> print(D[19].subs([(x1,4),(x2,2),(x3,3)]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x1' is not defined

定义不带“下标”的变量名可以很好地工作。 我使用的是Ubuntu 19.04和Visual Studio Code,这是我唯一能想到的,我昨晚进行了更新。

1 个答案:

答案 0 :(得分:4)

Python认为您正在尝试访问名为x1,x2或x3的变量,相反,您想告诉subs函数将表达式中“ x1”的实例替换为4。

要解决此问题,请将其括在引号中以使其成为字符串(显式优于隐式):

print(D[19].subs([("x1",4),("x2",2),("x3",3)]))
>>> 48

否则,如果要替换字符串“ x1”的实例,或者在代码中某处定义了一个名为x1的字符串变量,并且希望替换值{ {1}}在表达式中(这就是python认为您正在尝试的方法。)

您昨天可能拥有的代码(也许是在jupyter笔记本或交互式外壳中工作)在代码中的某个位置:

x1

与以下相同:

x1,x2,x3 = symbols('x1:4')

并解释为什么您的代码昨天起作用。