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)))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值