【问题标题】:How to convert Infix to Postfix using Stack如何使用 Stack 将 Infix 转换为 Postfix
【发布时间】:2019-11-30 20:32:32
【问题描述】:

这是我使用以前的堆栈代码将中缀转换为后缀的代码。堆栈代码可以正常工作,但我不明白我的 postix 转换器代码有什么问题。它返回“RecursionError:超出最大递归深度”。但我不认为这是问题所在。我想可能是 PrecedenceCheck 功能

def postfix(expr):
    if len(expr)<=0 or not isinstance(expr,str): 
        print("expr error: postfix")
        return "error"
    expr=expr.strip()
    items=Stack()
    outputVariable = ""
    pos=0

    for i in range(len(expr)):
        if expr[i] in '+-*/^()':  
            items.push(expr[pos:i].strip())  
            items.push(expr[i])    # operator
            pos=i+1  
            items.push(expr[pos:].strip())

        elif expr[i] is '1234567890':
            outputVariable += i
        elif expr[i] is '(':
            items.push(expr[i])
        elif expr[i] is ')':
            while True:
                temp = items.pop()
                if temp is None or temp == '(':
                    break
                else:
                    outputVariable += temp

        elif expr[i] in '+-*/^' and (items is False or items.peek() is '('):
            items.push(expr[i])
        elif PrecedenceCheck(expr[i]) is True:
            items.push(expr[i])

        elif expr[i] in '+-*/^' and PrecedenceCheck(expr[i]) is False:
        while True:
            items.pop()
            if items.isEmpty() is True:
                items.push(expr[i])
                break
    return outputVariable

precedence = {}
precedence['*'] = 3
precedence['/'] = 3
precedence['+'] = 2
precedence['-'] = 2
precedence['('] = 1
precedence['^'] = 1

def PrecedenceCheck(char):
    items=Stack()
    outputVariable= " "
    if char in '1234567890':
        return False
    elif PrecedenceCheck(char) is True:
        while precedence[char] < precedence[items.peek()]:
            x = items.pop()
            x += outputVariable
            items.push(char)
        return outputVariable
     else:
         return 'error message'

输入:('1 ^ 2') 预期输出:'1.0 2.0 ^' 实际输出:RecursionError: 超出最大递归深度

【问题讨论】:

    标签: python postfix-mta infix-notation


    【解决方案1】:

    if PrecedenceCheck(char) is True: 出现多次,但 PrecedenceCheck 可以返回 False 或字符串,两者都不会是 True。可能更好地清理 PrecedenceCheck 以始终返回布尔值,或者至少将条件更改为 if PrecedenceCheck(char): 并祈祷它永远不会返回 ''

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2021-12-15
      • 2014-04-14
      • 1970-01-01
      • 2016-05-27
      相关资源
      最近更新 更多