day21 计算器作业
生活随笔
收集整理的這篇文章主要介紹了
day21 计算器作业
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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 # 找括號,先找括號里面沒有括號的最里面的括號
6 # 先算括號里的乘除,再算括號里的加減
7
8 # 計算表達式
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 # 只用來計算原子型表達式,最小的表達式
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 # 計算沒有括號的表達式
25 # exp 為未經(jīng)過處理的最內(nèi)層的帶括號的表達式
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 #提取括號里面沒有其他括號的的表達式
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("表達式已經(jīng)沒有括號了",new_express)
51 break
?
轉(zhuǎn)載于:https://www.cnblogs.com/shijieli/p/9714600.html
總結
以上是生活随笔為你收集整理的day21 计算器作业的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可能是全网把 ZooKeeper 概念讲
- 下一篇: C++ algorithm库中的几个常用