昨晚我写了一些代码,一切正常。今天不会:
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,这是我唯一能想到的,我昨晚进行了更新。
答案 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')
并解释为什么您的代码昨天起作用。