(Leetcode) 基本计算器 II - Python实现

题目:基本计算器 II
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  。 整数除法仅保留整数部分。
示例 :
输入: "3+2*2",输出: 7
输入: " 3/2 ",输出: 1
输入: " 3+5 / 2 ",输出: 5
说明
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。

-------------------------------------------------------------------------------

解法1:先用 eval() 处理看下结果,当然题目不允许

eval() 函数用来执行一个字符串表达式,并返回表达式的值。

eval() 方法的语法: eval(expression[, globals[, locals]])
参数:
expression -- 表达式。
globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

class Solution(object):
    def calculate(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 题目要求除法只保留整数部分,所以将除号“/”调整为整除符“//”
        return eval(s.replace("/", "//"))

解法2#:把所有加减乘除运算转化“加法”运算

class Solution(object):
    def calculate(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 遇到加减,先保存元素结果;遇到乘除,则直接计算出结果
        stack = []  # 用于存储每一步的运算结果
        opera = '+'  # 设定初始运算为加法

        num = 0
        s += '+'
        for str in s:
            if str == ' ':
                continue
            # 遇到数字后,继续看后面是否还是如此
            if str in '0123456789':
                # 这里num*10操作的目的,是为了处理除个位数之外多位数,eg, 12, 437
                num = num*10 + int(str)
                continue

            if opera == '+':
                stack.append(num)
            elif opera == '-':
                stack.append(-num)
            elif opera == '*':
                # 遇到*,直接取出上一步运算的结果stack[-1]跟num相乘
                stack[-1] *= num
            elif opera == '/':
                # 遇到/,直接取出上一步运算的结果stack[-1]跟num做整除处理
                stack[-1] = stack[-1] // num
            opera = str
            num = 0
        return sum(stack)

 

参考:

https://www.runoob.com/python/python-func-eval.html

https://blog.csdn.net/weixin_42077402/article/details/92637562

https://blog.csdn.net/weixin_40349531/article/details/96440734

https://blog.csdn.net/qq_38575545/article/details/88597810

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值