在python计算器中,如何对()中的操作进行优先级排序,其中输入为字符串?

2024-09-28 21:01:06 发布

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

我正在完成代码战中的kata

给我一个类似"2 / 2 + 3 * 4 - 6""2 * ( 2 * ( 2 * ( 2 * 1 ) ) )"的字符串

我不知道如何在代码中处理()

目前我有:

class Calculator(object):
    def evaluate(self, string):
        # if () in s
        # find most inner ()
        s = string.split()
        while len(s) > 1:
            if ('/' in s or
                '*' in s):
                for i in range(len(s)):
                    if s[i] == '/':
                        s[i] = int(s[i-1]) / int(s[i+1])
                        s.pop(i-1)
                        s.pop(i)
                        break
                    elif s[i] == '*':
                        s[i] = int(s[i-1]) * int(s[i+1])
                        s.pop(i-1)
                        s.pop(i)
                        break
            else:
                for i in range(len(s)):
                    if s[i] == '-':
                        s[i] = int(s[i-1]) - int(s[i+1])
                        s.pop(i-1)
                        s.pop(i)
                        break
                    elif s[i] == '+':
                        s[i] = int(s[i-1]) + int(s[i+1])
                        s.pop(i-1)
                        s.pop(i)
                        break
        return s[0]

除了带()

我如何处理它们,使其遵循适当的数学规则

我们非常感谢您的任何建议。 [1] :https://www.codewars.com/kata/5235c913397cbf2508000048/train/python


Tags: 字符串代码inforstringlenifrange