这是我的代码,用于使用先前的堆栈代码将中缀转换为后缀。堆栈代码可以正常工作,但我不理解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:超过最大递归深度
答案 0 :(得分:0)
if PrecedenceCheck(char) is True:
发生了几次,但是PrecedenceCheck可以返回False或字符串,这两个都不是True。清理PrecedenceCheck最好总是返回一个布尔值,或者至少将条件更改为if PrecedenceCheck(char):
并用手指指望它永远不会返回''
。