码迷,mamicode.com
首页 > 编程语言 > 详细

开发一个简单的python计算器

时间:2017-05-01 10:04:04      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:自己   res   用户输入   计算公式   bsp   解析   pre   replace   实现   

1.实现加减乘除及拓号优先级解析

2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

 1 import re
 2 def func(a):
 3     while True:
 4         if * in a:
 5             c = a.split(*)
 6             if / in c[0]:
 7                 a = div(a)
 8             else:
 9                 a = mul(a)
10         elif / in a:
11             a = div(a)
12         else:
13             a = add(a)
14             return a
15 def mul(a):
16     b = re.search(r\d+\.?\d*\*-?\d+\.?\d*, a)
17     if b:
18         b = b.group()
19         l=b.split("*")
20         c=float(l[0])*float(l[1])
21         res = re.sub(r\d+\.?\d*\*-?\d+\.?\d*, str(c), a,1)
22         return res
23 def div(a):
24     b = re.search(r\d+\.?\d*/-?\d+\.?\d*, a)
25     if b:
26         b = b.group()
27         l=b.split("/")
28         c=float(l[0])/float(l[1])
29         res = re.sub(r\d+\.?\d*/-?\d+\.?\d*, str(c), a,1)
30         return res
31 def add(a):
32     if -- in a:
33         a = a.replace(--, +)
34     b = re.findall(r-?\d+\.?\d*, a) #把负数两个字符看成一个整体
35     c=0
36     for i in b:
37         c+=float(i)
38     return c
39 def caculate():
40     a = ‘‘.join(input(请输入计算公式(如1-2*((60-30+(-40/5))等此类:).split())#把输入字符串以空格切片然后在拼接
41     while True:
42         if ( in a:
43             b = re.search(r\(([^()]+)\), a)
44             if b:
45                 c = b.group()
46                 d = func(c)
47                 a = re.sub(r\(([^()]+)\), str(d), a, 1)
48         else:
49             print(func(a))
50             break
51 caculate()

 

开发一个简单的python计算器

标签:自己   res   用户输入   计算公式   bsp   解析   pre   replace   实现   

原文地址:http://www.cnblogs.com/lixiaomingpython/p/6791198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!