简易计算器python_python 简易四则运算计算器
# c=a if 成立就用c=a表达式 else b , 不成立c=b
import re
s_input="1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"
def Judging_Conformity(x):#判断式子里面是否只有数字和*/+-()空格或者有**、//、+*、*.、等错误形式
flag=True
if re.findall("[^*/+\-() \d]|[*/+\-.]+[*/+\-.]+|\([*/+]+|\.\d*\.",x):
flag=False
return flag
def format_replace(x):#格式化去掉空格
x=x.replace(" ","")
return add_sub(remove_md(x))
def add_sub(x):
x=re.sub("\+-|-\+","-",x)
x=re.sub("--|\+\+","+",x)
if not re.findall("[\d]+[+\-][\d]+",x):
if x[0]=="+":#去掉最后在数字前面的+
x=x[1:]
return x
else:
k=re.search("-?[\d.]+[+-][\d.]+",x).group()
k3=k
if x[0]=="-":#如果开头有-号
k=k[1:]
k2=float("-"+k.split("+")[0])+float(k.split("+")[1]) if "+" in k else float("-"+k.split("-")[0])+float(k.split("-")[1])
else:
k2=float(k.split("+")[0])+float(k.split("+")[1]) if "+" in k else float(k.split("-")[0]) - float(k.split("-")[1])
x=x.replace(k3,str(k2))
return add_sub(x)
def Multiplication_division(x):#乘除法
ret=float(x.split("*")[0])*float(x.split("*")[1]) if "*" in x else float(x.split("/")[0])/float(x.split("/")[1])
return ret
def remove_md(x):
if not re.findall("[*/]",x):
return x
else:
k=re.search("-?[\d.]+[*/]-?[\d.]+",x).group()
x=x.replace(k,"+"+ str(Multiplication_division(k))) if len(re.findall("-",k))==2 else x.replace(k,str(Multiplication_division(k)))
return remove_md(x)
def bin_Calculator(x):#启动计算器
if not re.search("\(.*\)",x):#如果没发现括号直接执行格式化然后加减乘除
return format_replace(x)
k=re.search("\([^()]+\)",x).group()
x=x.replace(k,str(format_replace(k[1:len(k)-1])))
return bin_Calculator(x)
def star_calculator(x):
x=x.replace(" ","")#去掉空格
if Judging_Conformity(x):#看是否符合输入标准.
return bin_Calculator(x)
else:
print("输入格式错误!")
print("原式子:{}\n正确答案:{}\n计算答案:{}".format(s_input,eval(s_input),star_calculator(s_input)))
标签:四则运算,return,python,float,replace,re,split,计算器,else
来源: https://www.cnblogs.com/master-xue/p/11749695.html