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技术站