用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

添加新评论