使用自定义Stack类实现中缀转后缀表达式时代码运行异常求助
问题修复说明
核心错误点
Stack.pop()方法逻辑错误:空栈时执行弹出操作,非空时反而返回空打印,完全写反判断条件;且弹出元素后未更新栈顶top属性,导致后续栈顶判断全部失效。Stack.pop()方法空栈分支无返回值,会导致后续列表拼接时出现非法None值。- 用Python内置关键字
list作为变量名,存在命名冲突风险。
修正后的完整代码
class Stack: def __init__(self): self.stack=[] self.top = None def empty(self): return not self.stack def push(self, item): self.stack.append(item) self.top = item def pop(self): # 修正判断条件:非空栈才执行弹出 if not self.empty(): a = self.stack.pop() # 弹出后更新栈顶 self.top = self.stack[-1] if not self.empty() else None return a else: print("Empty stack") return None def printall(self): print(self.stack) def clear(self): self.stack = [] self.top = None ysj = Stack() jy = [] # 修改变量名,避免和内置list冲突 expr_list = input().split() leng = len(expr_list) num = 0 for i in range(0, leng): if expr_list[i] == '+' or expr_list[i] == '-': while ysj.top is not None: jy.append(ysj.pop()) num = num - 1 ysj.push(expr_list[i]) num = num + 1 elif expr_list[i] == '/' or expr_list[i] == '*': while ysj.top == '/' or ysj.top == '*': jy.append(ysj.pop()) num = num - 1 ysj.push(expr_list[i]) num = num + 1 else: jy.append(int(expr_list[i])) for i in range(1, num + 1): jy.append(ysj.pop()) for i in range(0, len(jy)): print(jy[i], end=" ")
验证结果
修正后所有测试用例输出均符合后缀表达式规则:
- 输入
1 * 2 + 3→ 输出1 2 * 3 + - 输入
1 * 2 * 3→ 输出1 2 * 3 * - 输入
1 + 2 + 3→ 输出1 2 + 3 +
内容的提问来源于stack exchange,提问作者김규민
相关产品推荐
相关产品推荐

