解决给一个字符串,里面只会出现正整数以及 +-*/ 四种符号以及空格。已知这个字符串一定是符合算式规范的,多位数版本

import re
import copy
def calculate(demo_str):

    demo_str=demo_str.replace(' ','')
    suanshu = re.findall(r'[+,\-,*,/]',demo_str)

    demo_str=re.sub(r'[+,\-,*,/]','s',demo_str)#替换算数符号
    numbers=demo_str.split('s',)#分割 是为了取出多位数
    number=[]
    for i in numbers:
        i = int(i)
        number.append(i)




#乘除运算
    while True:

        for j in range(len(suanshu)):
            if suanshu[j] == "*":
                n1=number[j] * number[j+1]
                del number[j+1]
                number[j]=n1
                number=copy.deepcopy(number)

                del suanshu[j]
                suanshu = copy.deepcopy(suanshu)
                break

            elif suanshu[j] =="/":

                n1 = number[j] //number[j + 1]
                del number[j + 1]
                number[j] = n1
                number = copy.deepcopy(number)
                del suanshu[j]
                suanshu = copy.deepcopy(suanshu)
                break
        if "*" not in suanshu and  "/" not in suanshu:
            break


#加减运算
    while True:
        for k in range(len(suanshu)):

            if suanshu[k] == "+":

                n1 = number[k] + number[k + 1]
                del number[k + 1]
                number[k] = n1
                number = copy.deepcopy(number)
                del suanshu[k]
                suanshu = copy.deepcopy(suanshu)
                break
            elif suanshu[k] =="-":
                n1 = number[k] - number[k + 1]
                del number[k + 1]
                number[k] = n1
                number = copy.deepcopy(number)
                del suanshu[k]
                suanshu = copy.deepcopy(suanshu)
                break
        if "+" not in suanshu and  "-" not in suanshu:
            break


    print(number[0])
if __name__ == '__main__':
    for test_case in [
        "1 + 1",
        "1 * 1",
        "3 /2",
        "10 + 20*3 + 4 / 2",
    ]:
        calculate(test_case)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值