在Python中将s表达式作为字符串进行评估的程序
假设我们有一个字符串s作为S表达式。我们必须评估该S表达式并将结果作为整数返回。由于我们知道S表达式是一个表达式,它是一个数字或一个递归表达式(如(+(-3 2)(3 3)),其中表示(3-2)+(33)=10。其中有效的运算符是+、-、*和/。
因此,如果输入为s=”(-(+3 2)2)”,则输出为3,因为((3+2)-2)=3。
要解决这个问题,我们将按照以下步骤进行−
- stack:一个新堆栈
-
删除s的开括号和闭括号
-
a:使用空格拆分s,并制作一个分区列表
-
对于a中的每个i,按照相反的顺序执行以下操作
- 如果i的大小>1,则
- 如果i[0]与”-“相同,则
-
将i作为整数压入堆栈
-
进行下一个迭代
-
否则,
-
将i作为整数压入堆栈
-
否则当i是数字时,则
- 将i作为整数压入堆栈
- 否则,
- 如果堆栈的大小≥2,则
-
num1:从堆栈中弹出
-
num2:从堆栈中弹出
-
如果i与”+”相同,则
- 执行num1 + num2,并将其推入堆栈
- 否则当i与”-“相同时,则
- 执行num1 – num2,并将其推入堆栈
- 否则当i与”*”相同时,则
- 执行num1 * num2,并将其推入堆栈
- 否则,
- 执行num1 / num2,并将其推入堆栈
- 如果i的大小>1,则
- 返回堆栈顶部元素,并删除顶部元素
示例
让我们看下面的实现,以更好地理解−