python计算器程序_python写的计算器程序

模拟加减乘除,用正则和递归实现,效率有点低,主要目的是练习正则。

执行效果如下:

1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998+10 * 568/14 )) - (-4*3)/ (16-3*2) ) #原始计算公式

1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998+10 * 568/14 )) - (-4*3)/ (16-3*2) ) #原始计算公式

1-2*((60-30+-8.0*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)) #提取(-40/5)进行计算,去除了所有的空白字符

1-2*((60-30+-8.0*173545.88095238098)-(-4*3)/(16-3*2))  #提取(9-2*5/3+7/3*99/4*2998+10*568/14)进行计算

1-2*(-1388337.0476190478-(-4*3)/(16-3*2))  #提取(60-30+-8.0*173545.88095238098)进行计算

1-2*(-1388337.0476190478--12.0/(16-3*2))  #提取(-4*3)进行处理

1-2*(-1388337.0476190478--12.0/10.0)  #提取(16-3*2)进行处理

1-2*-1388335.8476190479  #提取(-1388337.0476190478--12.0/10.0)进行处理

2776672.6952380957  #最终结果,与计算器结果执行一致

1 #!/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #@Time : 2017/11/6 15:37

4 #@Author : lichuan

5 #@File : calcu.py

6

7

8 importre9 importtime10 #s='3 * 10+9/3+2 * 6'

11 #re.compile('[-+]')

12

13 #做乘法除法

14 defmul(strings):15 '''

16 乘法加法17 :param s:18 :return:19 '''

20 #print('this is add_del function')

21 pattern=re.compile('\d+\.?\d*[\*\/]+[-+]?\d+\.?\d*')22 match=pattern.search(strings)23 if notmatch:24 returnstrings25 s=match.group()26 if '*' ins:27 value1=s.split('*')[0]28 value2=s.split('*')[1]29 value=float(value1)*float(value2)30 elif '/' ins:31 value1 = s.split('/')[0]32 value2 = s.split('/')[1]33 value = float(value1) /float(value2)34 new_s=pattern.sub(str(value),strings,count=1)35 #print(new_s)

36 returnmul(new_s)37

38 #做加法减法

39 defadd_del(strings):40 #print('this is add_del function')

41 strings=clear(strings)42 pattern = re.compile('[-]?\d+\.?\d*\s*[-+]+\s*\d+\.?\d*')43 match =pattern.search(strings)44 if notmatch:45 returnstrings46 s=match.group()47 if '+' ins:48 value1 = s.split('+')[0]49 value2 = s.split('+')[1]50 value = float(value1) +float(value2)51 new_s = pattern.sub(str(value), strings, count=1)52 returnadd_del(new_s)53 elif '-' ins :54 if re.match('^-',s):55 value1 = s.split('-')[1]56 value2 = s.split('-')[2]57 value = -float(value1) -float(value2)58 else:59 value1 = s.split('-')[0]60 value2 = s.split('-')[1]61 value = float(value1) -float(value2)62 new_s = pattern.sub(str(value), strings, count=1)63 #print(new_s)

64 returnadd_del(new_s)65

66 #提取括号内容进行操作

67 defbrackets(strings):68 #print('this is brackets function')

69 print(strings)70 strings = re.sub('\s', '', strings)71 #strings=clear(strings)

72 pattern = re.compile('\([-]?\d+\.?\d*\s*([-+*/]*\s*\d+\.?\d*\s*){1,}\)')73 match =pattern.search(strings)74 if notmatch:75 s=mul(strings)76 r=add_del(s)77 returnr78 else:79 s=match.group()80 new_s=s.replace('(','')81 new_s=new_s.replace(')','')82 m_s=mul(new_s)83 a_s=add_del(m_s)84 #print(a_s)

85 #print(strings)

86 r=pattern.sub(a_s,strings,count=1)87 returnbrackets(r)88

89 #合并--、-+、+-、++等重复的运算符

90 defclear(strings):91 #print('this is clear function')

92 s=strings93 pattern_1 = re.compile('[-+]+[-+]+')94 m =pattern_1.search(strings)95 if notm:96 returnstrings97 else:98 strings=re.sub('--','+',s)99 strings=re.sub('-+','-',strings)100 strings=re.sub('\+\+','+',strings)101 strings=re.sub('\+\-','-',strings)102 returnclear(strings)103

104

105 if __name__ == '__main__':106 start=time.time()107 s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998+10 * 568/14 )) - (-4*3)/ (16-3*2) )'

108 print(s)109 b=brackets(s)110 print(b)111 end=time.time()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值