用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.6952380957

print(eval(strvar))

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Python写一个一次性计算出加减乘除的运算小程序 - Python技术站

(0)
上一篇 2023年4月2日 下午4:11
下一篇 2023年4月2日 下午4:12

相关文章

  • 用Python来写个小型购物车程序

    0x1 前言 Python语言能做很多东西的,像数据分析啊、自动化、开发、 爬虫(真的很棒哟,初学者玩很有成就感的啊哈哈)等等还有挺多。 0x2 用Python编写的一个小型购物车程序 import time money = 0 goods_lst = [ {“name”: “电脑”, “price”: 1999}, {“name”: “鼠标”, “pric…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部