在Python中将s表达式作为字符串进行评估的程序

在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,并将其推入堆栈
  • 返回堆栈顶部元素,并删除顶部元素

示例

让我们看下面的实现,以更好地理解−

class Solution:
   def solve(self, s):
      stack = list()
      s = s.replace("(", "")
      s = s.replace(")", "")
      a = s.split()
      for i in a[::-1]:
        if len(i) > 1:
            if i[0] == "-":
               stack.append(int(i))
               continue
            else:
               stack.append(int(i))
        elif i.isdigit():
            stack.append(int(i))
        else:
            if len(stack) >= 2:
               num1 = stack.pop()
               num2 = stack.pop()
               if i == "+":
                  stack.append(int(num1 + num2))
               elif i == "-":
                  stack.append(int(num1 - num2))
               elif i == "*":
                  stack.append(int(num1 * num2))
               else:
                  stack.append(int(num1 / num2))
      return stack.pop()
ob = Solution()
s = "(- (+ 3 2) 2)"
print(ob.solve(s))

输入

s = "(- (+ 3 2) 2)"

输出

3

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程