如果运算符出现在表达式前面,如何将中缀转换为前缀?

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)'