python对字符串输入数学表达式实现加减乘除

解决思路

  • 首先是遍历处理,将数字和符合提取出来,写入栈中
  • 对于乘除运算符先将栈中最后一位弹出运算后再将结果压入
  • 对于括号进行递归处理,获取括号内字符串,调用自身得到值
class Solution:
    def calculate(self, character_string):
        str_len = len(character_string)
        # 存取部分数据和
        stack = []
        preSign = '+'
        num = 0
        i = 0
        while i < str_len:  # 以i为计数器遍历字符串
            char = character_string[i]
            if char == ' ':  # 跳过空格
                i = i + 1
                continue
            if char.isdigit():  # 如果是数字
                num = num * 10 + int(char)

            # 如果遇到左括号,递归求出括号内表达式的值
            if char == '(':
                j = i + 1
                counts = 1
                # 截取出括号表达式的值
                while counts > 0:
                	# 这个地方很巧妙,利用counts来成对的取出括号里的表达式
                    if character_string[j] == "(":
                        counts = counts + 1
                    if character_string[j] == ")":
                        counts = counts - 1
                    j = j + 1
                # 剥去一层括号,求括号内表达式的值
                num = self.calculate(character_string[i + 1:j - 1])
                i = j - 1

            if not char.isdigit() or i == str_len - 1:
                if preSign == "+":
                    stack.append(num)
                elif preSign == "-":
                    stack.append(-1 * num)
                elif preSign == "*":
                    tmp = stack.pop()
                    stack.append(tmp * num)

                num = 0
                preSign = char
            i = i + 1
        return sum(stack)


if __name__ == "__main__":
    s = Solution()
	print(s.calculate("(3+4)*(5+(2-3))"))

# return 
28
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值