糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > python学习之正则表达式练习:编写一个计算器

python学习之正则表达式练习:编写一个计算器

时间:2020-02-04 18:30:23

相关推荐

python学习之正则表达式练习:编写一个计算器

#!/usr/bin/env python

importre

defdeal_negative_issue(calc_list):

new_calc_list=[] #定义一个新的空列表,后面筛选完成后将数据放入新列表中

forindex,iteminenumerate(calc_list):

ifitem.strip().endswith("*")oritem.strip().endswith("/"): #挑选出以乘号或除号结尾的字符串

new_calc_list.append("%s-%s"%(calc_list[index],calc_list[index+1]))#拼接字符串处理类似2*5/-3

#elif("*"or"/")initem: #找出列表中的有乘除的选项,这种写法我试了好像只匹配*在,单独40/5这种匹配不出来

elif("/")initemor("*")initem:

print(item)

new_calc_list.append(item)

print("new_calc_ist",new_calc_list)

returnnew_calc_list

defdeal_unusual_issue(formula):

formula=formula.replace("++","+")

formula=formula.replace("+-","-")

formula=formula.replace("-+","-")

formula=formula.replace("--","+")

formula=formula.replace("--","+")

returnformula

#defaddition_and_subtraction(formula):

# sub_calc_list=re.split("[+-]",formula)

# sub_operator_list=re.findall("[+-]",formula)

# print(type(sub_calc_list),sub_operator_list)

# totle_res=None

# forindex,iinenumerate(sub_calc_list):

# iftotle_res:#sub_res为真,表示这不是第一次循环

#ifsub_operator_list[index-1]=="+": #通过sub_operator_list中的index判断到底是加法还是减法

#totle_res+=float(i)

#else:

#totle_res-=float(i)

# else:

#sub_res=float(i)

# print(totle_res)

defcalculating(formula):

print("运算",formula)

calc_list=re.split("[+-]",formula) #通过+-符号将各个乘除运算分隔出来

calc_list=deal_negative_issue(calc_list)

print(calc_list)

foritemincalc_list:

sub_calc_list=re.split("[*/]",item)

sub_operator_list=re.findall("[*/]",item) #将乘号除号通过列表方式分隔出来

print(sub_calc_list,sub_operator_list)

sub_res=None

forindex,iinenumerate(sub_calc_list):

ifsub_res:#sub_res为真,表示这不是第一次循环

ifsub_operator_list[index-1]=="*": #通过sub_operator_list中的index判断到底是加法还是减法,

sub_res*=float(i)

else:

sub_res/=float(i)

else:

sub_res=float(i)

print("[%s]="%item,sub_res)

formula=formula.replace(item,str(sub_res))

formula=deal_unusual_issue(formula)

print(formula)

#计算+-法

totle_calc_list=re.split("[+-]",formula)

totle_operator_list=re.findall("[+-]",formula) #将乘号除号通过列表方式分隔出来

print(totle_calc_list,totle_operator_list)

totle_res=None

forindex,iteminenumerate(totle_calc_list):

iftotle_res:#sub_res为真,表示这不是第一次循环

iftotle_operator_list[index-1]=="+": #通过sub_operator_list中的index判断到底是加法还是减法,

totle_res+=float(item)

else:

totle_res-=float(item)

else:

totle_res=float(item)

#returnformula

print("[结果]=",totle_res)

returntotle_res

defcalc(formula):

parentheses_flag=True

calc_res=None

whileparentheses_flag:

m=re.search("\([^()]*\)",formula) #找出最底层的括号,一个一个找

print(m)

ifm:

#print(type(m.group()))

subformula=m.group().strip("()") #把找出来的括号剥离

subres=calculating(subformula)

formula=formula.replace(m.group(),str(subres))

else:

print("没括号了")

print("最终结果为",calculating(formula))

parentheses_flag=False

if__name__=='__main__':

res=calc("1-2*((60-30+(9-2*5/-3+7/3*99/4*2998+10*568/14)*(40/5))-(4*3)/(16-3*2))")

#res=calc("2*(40/5)")

#备注:-40/5功能没有实现

如果觉得《python学习之正则表达式练习:编写一个计算器》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。