Python 如何消除sympy替换错误消息?

Python 如何消除sympy替换错误消息?,python,sympy,Python,Sympy,我有一个恼人的错误消息,我无法找出它。 以下代码(在Python 3中)给出了正确的结果: from sympy import * x, y, z, t = symbols('x y z t') expr = cos(x) + 1 print(expr.subs(x, y)) 结果是: cos(y) + 1 但是,当expr被修改或不同时 from sympy import * x, y, z, t = symbols('x y z t') expr = 1 print(expr.sub

我有一个恼人的错误消息,我无法找出它。 以下代码(在Python 3中)给出了正确的结果:

from sympy import *
x, y, z, t = symbols('x y z t') 
expr = cos(x) + 1
print(expr.subs(x, y))
结果是:

cos(y) + 1
但是,当expr被修改或不同时

from sympy import *
x, y, z, t = symbols('x y z t') 
expr = 1
print(expr.subs(x, y))
输出的错误消息是:

AttributeError: 'int' object has no attribute 'subs'
我怎样才能解决这个问题?必要时,我需要SUB来处理符号表达式和数值表达式(比如符号表达式被修改成数值形式)。
注意。

第二个示例中的
1
不是一个SymPy数,只是一个常规的Python整数

您可以使用
S()
(或
sympify()
)函数将其转换为一个SymPy编号


官方文档中有一个描述了您的问题并给出了几个示例,还有一个说明了
sympify
可以做什么的示例。

第二个示例中的
1
不是一个SymPy数,只是一个常规的Python整数

您可以使用
S()
(或
sympify()
)函数将其转换为一个SymPy编号


官方文档中有一个描述您的问题并给出了更多示例,还有一个说明了
sympify
可以做些什么。

1
不是Sympy表达式
1
只是一个常规的Python int。如果要对其执行替换,则需要将其包装为一个Sympy整数。(另外,请停止使用
import*
):

请注意,同向整数的显示方式与常规整数相同,因此,如果一些
1
s似乎有
subs
方法,而另一些则没有,那么这些
1
s可能不是同一类型。您可以使用
类型检查

In [14]: x = 1

In [15]: y = sympy.Integer(1)

In [16]: x
Out[16]: 1

In [17]: y
Out[17]: 1

In [18]: type(x)
Out[18]: int

In [19]: type(y)
Out[19]: sympy.core.numbers.One

1
不是同义表达式
1
只是一个常规的Python int。如果要对其执行替换,则需要将其包装为一个Sympy整数。(另外,请停止使用
import*
):

请注意,同向整数的显示方式与常规整数相同,因此,如果一些
1
s似乎有
subs
方法,而另一些则没有,那么这些
1
s可能不是同一类型。您可以使用
类型检查

In [14]: x = 1

In [15]: y = sympy.Integer(1)

In [16]: x
Out[16]: 1

In [17]: y
Out[17]: 1

In [18]: type(x)
Out[18]: int

In [19]: type(y)
Out[19]: sympy.core.numbers.One

与其他答案一样,
1
不是一个SymPy整数,而是一个Python整数。因此它没有SymPy的方法

您可以将
expr
声明为以下之一,以使其正常工作:

  • expr=S.One
  • expr=S(1)
  • expr=整数(1)
SymPy整数是类
Integer
的实例,而Python整数是
int
对象

还有一个避免此步骤的额外技巧:执行
isympy-i
-i
参数添加了一个额外的输入层,用
整数(数字)
对象替换所有数字,例如:

In [1]: 1
Out[1]: 1

In [2]: In[1]
Out[2]: u'Integer (1 )'

也就是说,用IPython检查输入1是什么,给出了
u'Integer(1)

与其他答案一样,
1
不是一个SymPy整数,而是一个Python整数。因此它没有SymPy的方法

您可以将
expr
声明为以下之一,以使其正常工作:

  • expr=S.One
  • expr=S(1)
  • expr=整数(1)
SymPy整数是类
Integer
的实例,而Python整数是
int
对象

还有一个避免此步骤的额外技巧:执行
isympy-i
-i
参数添加了一个额外的输入层,用
整数(数字)
对象替换所有数字,例如:

In [1]: 1
Out[1]: 1

In [2]: In[1]
Out[2]: u'Integer (1 )'

也就是说,使用IPython检查输入1是什么,会给出
u'Integer(1)

感谢Carlson编辑我的问题。找不到代码块。谢谢Carlson编辑我的问题。在那里找不到代码块