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

假设我们有一个字符串s作为S表达式。我们必须评估该S表达式并以整数形式返回结果。我们知道s表达式是一个数字,或者是一个用括号括起来的递归表达式,例如(+(-3 2)(* 3 3)),表示(3-2)+(3 * 3)=10。这里有效的运算符是+,-,*和/。

因此,如果输入像s =“(-(+(3 2 2)2)”),则输出将为3,因为((3 + 2)-2)= 3。

例  

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

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

猜你喜欢