基本计算器 II

122 篇文章 2 订阅

基本计算器 II1

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例 1:

输入: “3+2*2”
输出: 7
示例 2:

输入: " 3/2 "
输出: 1
示例 3:

输入: " 3+5 / 2 "
输出: 5
说明:

你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。

class Solution:
    def calculate(self, s: str) -> int:
    	# 去除空格
        s=s.replace(' ','')
        n=[]
        a=''
        # 0至9的自然数字典
        nl={str(i):True for i in range(10)}
        # 按加号+运算符分离
        # 减号-运算符和后面连接数值组成一个负数
        for m in s:
            if nl.get(m, False):
                a+=m
            elif m=='+':
                if a!='':
                    n.append(a)
                a=''
            elif m=='-':
                if a!='':
                    n.append(a)
                a='-'
            elif m=='*':
                a+=m
            elif m=='/':
                a+=m
        if a!='':
            n.append(a)
        # 按加号+运算符分离出的数组,只包含数值(包含负数),乘除法运算表达式
        # 这样只需逐个累加数值或运算符表达式的值
        b=0
        c=0
        for m in n:
        	# 按乘除*/运算符分离
        	# 只包含乘号*运算符
            if '*' in m and not '/' in m:
               na=m.split('*')
               b=1
               for num in na:
                   b*=int(num)
               b=int(b)
           	# 只包含除号/运算符
            elif '/' in m and not '*' in m:
                na=m.split('/')
                b=int(na[0])
                for i in range(1,len(na)):
                    b/=int(na[i])
                b=int(b)
            # 同时包含乘除*/运算符
            elif '/' in m and '*' in m:
                na=m.split('*')
                if '/' in na[0]:
                    naa=na[0].split('/')
                    b=int(naa[0])
                    for i in range(1,len(naa)):
                        b/=int(naa[i])
                        b=int(b)
                else:
                    b=int(na[0])
                for i in range(1, len(na)):
                    if '/' in na[i]:
                        naa=na[i].split('/')
                        b*=int(naa[0])
                        for j in range(1,len(naa)):
                            b/=int(naa[j])
                            b=int(b)
                    else:
                        b*=int(na[i])
                b=int(b)
            else:
                b=int(m)
            # 所有按加号+运算符分离出的元素之和:c
            c+=b
        c=int(c)
        return c

  1. 题目来源:力扣LeetCode ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值