繁体   English   中英

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

[英]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)'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM