我的postfix计算器有多个错误

2024-03-28 12:52:11 发布

您现在位置:Python中文网/ 问答频道 /正文

感谢StackOverflow的优秀用户,我终于让我的postfix计算器至少部分工作了。然而,我仍然遇到了许多问题。在

我用这个代码编辑了一千遍:

f = open("expressions.txt")
l = f.readlines()

当我这样做时,我得到一个列表['5 4 3*9/n','3 4-9 3*/n']。我试着浏览并把列表串起来,我试着事先把列表串起来,我甚至还以为它已经是一个字符串了。之后,我尝试了split(''')和split('\n')和replace('','')和replace('/n',''),但是完全没有任何结果。名单看起来完全一样。在

2.)对于表达式为“intintintopr opr”的表达式,代码可以工作。但是,在“int int int opr int”的情况下,或者在两个整数之间存在运算符的任何其他时间,它都会计算错误。在

3.)对于上述问题,如果程序读取了一个中缀表达式(如3+4),则程序应该引发异常。所以我怎么告诉它/不/接受3+4,除非它已经在一个已经被验证为后缀的表达式中,比如3+4 9 8*。在

^{pr2}$

Tags: 代码用户程序编辑列表表达式openstackoverflow
1条回答
网友
1楼 · 发布于 2024-03-28 12:52:11

1)已经由@padrainchunningham在对问题的评论中回答:

lines = [line.strip().split() for line in source_file]

2)你不能用这种方法把数字和运算符分成两个独立的堆栈。操作员必须在看到运算符时对堆栈顶部的两个元素进行操作。实现这一点最简单的方法是省去运算符堆栈,立即用当前的数字堆栈计算运算符。在

3)3 + 4 9 8 *不是有效的修复后表达式。有一个3和一个+,它只有一个参数,而不是它需要的两个参数。识别无效表达式可以很容易地通过在每次处理一个运算符时以及在整个表达式求值之后查看堆栈来完成。在每个运算符之前,堆栈上必须至少有足够的操作数用于该运算符。在计算表达式之后,应该只有一个值,即结果,留在堆栈上。在

因此,它可以归结为:只需计算后缀表达式并在途中遇到问题时引发异常。在


Update:一个计算后缀符号的简单函数:

^{pr2}$

相关问题 更多 >