python(32)- 模块练习Ⅱ:使用正则表达式实现计算器的功能
开发一个简单的python计算器
实现加减乘除及拓号优先级解析
用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,
必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,
结果必须与真实的计算器所得出的结果一致
import re def func(a): while True: if '*' in a: c = a.split('*') if '/' in c[0]: a = div(a) else: a = mul(a) elif '/' in a: a = div(a) else: a = add(a) return a def mul(a): b = re.search(r'\d+\.?\d*\*-?\d+\.?\d*', a) if b: b = b.group() l=b.split("*") c=float(l[0])*float(l[1]) res = re.sub(r'\d+\.?\d*\*-?\d+\.?\d*', str(c), a,1) return res def div(a): b = re.search(r'\d+\.?\d*/-?\d+\.?\d*', a) if b: b = b.group() l=b.split("/") c=float(l[0])/float(l[1]) res = re.sub(r'\d+\.?\d*/-?\d+\.?\d*', str(c), a,1) return res def add(a): if '--' in a: a = a.replace('--', '+') b = re.findall(r'-?\d+\.?\d*', a) #把负数两个字符看成一个整体 c=0 for i in b: c+=float(i) return c def caculate(): a = ''.join(input('请输入计算公式如1-2*(60-30+(-40/5))等此类:').split())#把输入字符串以空格切片然后在拼接 while True: if '(' in a: b = re.search(r'\(([^()]+)\)', a) if b: c = b.group() d = func(c) a = re.sub(r'\(([^()]+)\)', str(d), a, 1) else: print(func(a)) break caculate()