如果运算符出现在表达式前面,如何将中缀转换为前缀?
How to convert infix to prefix if the operator present in front of expression?
如果一个方程是(- 3 + 5),我如何将它转换成前缀?
它的运算符在等式前面。
如果您使用 srepr
打印 unevaluate 表达式,它将准确显示表达式在 SymPy/Python:
中的表示方式
>>> from sympy import srepr, Add
>>> srepr(Add(-3,5,evaluate=False))
'Add(Integer(-3), Integer(5))'
我猜你不想要这个。处理打印的最通用方法是创建自定义打印机(您必须查看相关文档)。或者,根据您要处理的案例的复杂程度,您可以处理这样一个简单的案例:
>>> from sympy import Add, Mul, S, Symbol
>>> ops = {Add: '+(%s, %s)', Mul: '*(%s, %s)'}
>>> def pr(eq):
... eq = S(eq)
... if eq.func not in ops: return str(eq)
... a, b = eq.as_two_terms()
... return ops[eq.func] % (pr(a), pr(b))
>>> pr(x + y)
'+(x, y)'
>>> pr(3*x + y - z)
'+(y, +(*(-1, z), *(3, x)))'
有一种替代文字数字的方法,因此它们的行为类似于符号:创建名称为数字字符串的符号,例如
>>> a, b = (-3, 5)
>>> pr(a + b) # -3 + 5 collapses automatically to 2
'2'
>>> a, b = [Symbol(str(i)) for i in (a,b)] # create symbols from numbers
>>> pr(a + b)
'+(-3, 5)'
如果一个方程是(- 3 + 5),我如何将它转换成前缀? 它的运算符在等式前面。
如果您使用 srepr
打印 unevaluate 表达式,它将准确显示表达式在 SymPy/Python:
>>> from sympy import srepr, Add
>>> srepr(Add(-3,5,evaluate=False))
'Add(Integer(-3), Integer(5))'
我猜你不想要这个。处理打印的最通用方法是创建自定义打印机(您必须查看相关文档)。或者,根据您要处理的案例的复杂程度,您可以处理这样一个简单的案例:
>>> from sympy import Add, Mul, S, Symbol
>>> ops = {Add: '+(%s, %s)', Mul: '*(%s, %s)'}
>>> def pr(eq):
... eq = S(eq)
... if eq.func not in ops: return str(eq)
... a, b = eq.as_two_terms()
... return ops[eq.func] % (pr(a), pr(b))
>>> pr(x + y)
'+(x, y)'
>>> pr(3*x + y - z)
'+(y, +(*(-1, z), *(3, x)))'
有一种替代文字数字的方法,因此它们的行为类似于符号:创建名称为数字字符串的符号,例如
>>> a, b = (-3, 5)
>>> pr(a + b) # -3 + 5 collapses automatically to 2
'2'
>>> a, b = [Symbol(str(i)) for i in (a,b)] # create symbols from numbers
>>> pr(a + b)
'+(-3, 5)'