Python实现RPN栈计算器时calculation函数无法访问输入列表问题
问题排查与修正方案
你的代码存在3个核心问题:
- 输入采集函数无终止逻辑与返回值:
inputs()内的while True是无限循环,没有设置触发停止的条件,也没有return语句返回收集到的输入列表,调用后既不会结束运行,也无法返回数据供计算逻辑使用。 - 命名冲突:函数名、函数内存储输入的列表名、
calculation()的参数名全部使用inputs,会导致作用域混乱,无法正确调用函数或读取变量。 - 传参逻辑冗余:
calculation()的参数没有实际作用,函数第一行就将参数覆盖为inputs()的返回值,两种传参逻辑冲突。
修正后可运行代码
# 输入采集函数,输入=时终止并返回输入列表 def get_rpn_input(): operators = {'+', '-', '*', '/', '%', '='} input_list = [] print("请逐行输入逆波兰表达式元素,输入=结束:") while True: blank = input().strip() # 遇到终止符=时返回收集到的列表 if blank == '=': return input_list if blank not in operators: # 增加非法输入捕获,避免非整数字符串转换报错 try: input_list.append(int(blank)) except ValueError: print("无效输入,请输入整数或支持的运算符(+ - * / %)") continue else: input_list.append(blank) print("当前输入列表: ", input_list) # 计算逻辑函数 def calculation(input_list=None): # 支持直接传入预处理好的输入列表,也支持主动采集用户输入 if input_list is None: input_list = get_rpn_input() stack = [] for a in input_list: if isinstance(a, int): stack.append(a) print(f"入栈元素{a},当前栈: {stack}") continue # 运算前校验栈内元素数量,避免表达式不合法报错 if len(stack) < 2: print("表达式不合法:运算符前缺少操作数") return None op2, op1 = stack.pop(), stack.pop() if a == '+': result = op1 + op2 elif a == '-': result = op1 - op2 elif a == '*': result = op1 * op2 elif a == '/': # 整数除法可按需调整为浮点数除法 result = int(op1 / op2) elif a == '%': result = op1 % op2 else: print(f"不支持的运算符{a}") return None stack.append(result) print(f"执行运算{op1} {a} {op2} = {result},当前栈: {stack}") # 校验最终栈内元素数量,判断表达式合法性 if len(stack) == 1: return stack[0] else: print("表达式不合法:操作数过多") return None # 调用示例 if __name__ == "__main__": calc_result = calculation() if calc_result is not None: print(f"最终计算结果为: {calc_result}")
使用示例
比如要计算逆波兰表达式3 4 +(即中缀的3+4),按顺序输入:
- 输入
3 - 输入
4 - 输入
+ - 输入
=
即可得到计算结果7。
内容的提问来源于stack exchange,提问作者up91
相关产品推荐
相关产品推荐

