day21 计算器作业
生活随笔
收集整理的這篇文章主要介紹了
day21 计算器作业
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 import re
2
3 express = '1 - 2 * ( ( 6 0 -3 0 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
4 # 去掉所有的空格
5 # 找括號(hào),先找括號(hào)里面沒(méi)有括號(hào)的最里面的括號(hào)
6 # 先算括號(hào)里的乘除,再算括號(hào)里的加減
7
8 # 計(jì)算表達(dá)式
9 def dealwith(express):
10 if "+-" in express:express.replace("+-","-")
11 if "+-" in express:express.replace("--","+")
12 return express
13
14 def cal_exp_son(exp_son):
15 # 只用來(lái)計(jì)算原子型表達(dá)式,最小的表達(dá)式
16 if "/" in exp_son:
17 a,b = exp_son.split("/")
18 return str(float(a)/float(b))
19 if "*" in exp_son:
20 a,b = exp_son.split("*")
21 return str(float(a) * float(b))
22
23 def cal_express_no_bracket(exp):
24 # 計(jì)算沒(méi)有括號(hào)的表達(dá)式
25 # exp 為未經(jīng)過(guò)處理的最內(nèi)層的帶括號(hào)的表達(dá)式
26 exp = exp.strip("()")
27 print(exp)
28 # 先乘除,后加減
29 while True:
30 ret = re.search("\d+\.?\d*[*/]-?\d+\.?\d*",exp)
31 if ret :
32 exp_son = ret.group()
33 ret = cal_exp_son(exp_son)
34 exp = exp.replace(exp_son,ret)
35
36 # 將空格去除
37 new_express = re.sub(" ","",express)
38
39 #提取括號(hào)里面沒(méi)有其他括號(hào)的的表達(dá)式
40 while True:
41 ret = re.search("\([^()]+\)",new_express)
42 if ret :
43 express_no_bracket = ret.group()
44 ret = cal_express_no_bracket(express_no_bracket)
45 new_express= new_express.replace(express_no_bracket,ret)
46 print(new_express)
47 new_express = dealwith(new_express)
48 print(new_express)
49 else:
50 print("表達(dá)式已經(jīng)沒(méi)有括號(hào)了",new_express)
51 break
?
轉(zhuǎn)載于:https://www.cnblogs.com/shijieli/p/9714600.html
總結(jié)
以上是生活随笔為你收集整理的day21 计算器作业的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 可能是全网把 ZooKeeper 概念讲
- 下一篇: C++ algorithm库中的几个常用