【问题标题】:How to convert infix to prefix if the operator present in front of expression?如果运算符出现在表达式前面,如何将中缀转换为前缀?
【发布时间】:2022-01-23 11:13:37
【问题描述】:

如果等式是 (- 3 + 5),我如何将其转换为前缀? 它的运算符在等式前面。

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    如果您使用 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)'
    

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多