最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界动态:用Python写一个一次性计算出加减乘除的运算小程序

来源:博客园


(资料图片)

0x1 前言

跟上一个购物车一样的玩法,也都挺简单的,看标题意思就懂了,不做多介绍了

0x2 加减乘除的运算小程序

import re# 处理字符串中的符号def sign_exp(strvar):    strvar = strvar.replace("+-","-")    strvar = strvar.replace("--","+")    strvar = strvar.replace("-+","-")    strvar = strvar.replace("++","+")    return strvar    # 计算表达式def calc_exp(strvar):    if "*" in strvar:        a,b = strvar.split("*")        return float(a) * float(b)            if "/" in strvar:        a,b = strvar.split("/")        return float(a) / float(b)# 一次性把括号里面所有内容全部计算完毕def opreate_exp(strvar):    # 先计算乘除    while True:        obj = re.search("\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?",strvar)        if obj :            res1 = obj.group()            print(res1) # 5*-2  3/2            # 用calc_exp进行计算最后的结果            res2 = calc_exp(res1)            print(res2) # -10.0  1.5            strvar = strvar.replace(res1,str(res2))            print(strvar)        else:            break            # 处理表达式当中的符号    strvar = sign_exp(strvar)    print(strvar)        # 在计算加减    lst = re.findall("[+-]?\d+(?:\.\d+)?",strvar)    print(lst)            # 得到最后的值返回    total = 0    for i in lst:        total += float(i)    print(total) # 30.0    return total    def remove_bracket(strvar):    while True:        obj = re.search(r"\([^()]+\)",strvar)        print(obj)        if obj:            res1 = obj.group()            print(res1) # (40+5*-2+3/2)            # 计算表达式里面的值            res2 = opreate_exp(res1)            print(res2) # 31.5            # 把原来的括号替换掉            strvar = strvar.replace(res1,str(res2))            # print(strvar) # -30+31.5*8 + (4-7)        else:            return strvar        def main(strvar):    # 0.把所有的空格去掉     strvar = strvar.replace(" ","")    # 1.去除小括号    strvar = remove_bracket(strvar)    # 2.计算表达式    # print(strvar) # -30+31.5*8+-3.0    return opreate_exp(strvar)        # strvar = "-30+(40+5*-2+3/2)*8 + (4-7)"strvar = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"res = main(strvar)print(res)# 2776672.6952380957print(eval(strvar))

关键词: 计算表达式 加减乘除 把原来的