python输出计算结果_python 实现计算器功能 输入字符串,输出相应结果

这篇博客介绍了如何使用Python实现一个简单的计算器功能。通过正则表达式处理输入的数学公式,逐步计算加减乘除,以及处理括号内的运算,最终得出计算结果。

1 import re

2 formul='2*(1+2*6/3-2)+5+2*(1+6/2/3-2)'

3

4 def addjian(func):

5 digital = re.split('(\d)',func)

6 for index in range(1,len(digital),2):

7 if digital[index] == '+':

8 digital[index + 1] = str(int(digital[index - 1]) + int(digital[index + 1]))

9 elif digital[index] == '-':

10 digital[index + 1] = str(int(digital[index - 1]) - int(digital[index + 1]))

11

12 return digital[-1]

13 def chengchu(func):

14 ret = re.findall('\d+[^+-]+\d',func)

15 for i in ret:

16 digital = re.split('(\d)',i) #加个括号是为了优先级的原因,保留非数字

17 for index in range(1,len(digital),2):##这个地方的思想很巧妙,假设[1,/,2,*,3,/,4,*,5],

18 # 我会把1/2的结果替换到2的身上位0.5,然后,0.5*3的结果替换到3的身上,最终结果取最后一个。。。

19 if digital[index] == '*' :

20 digital[index+1] = str(int(digital[index-1])*int(digital[index+1]))

21 elif digital[index] == '/' :

22 digital[index + 1] = str(int(digital[index - 1]) //int(digital[index + 1]))

23 func = re.sub('\d+[^+-]+\d',digital[-1],func,1)

24 return func

25 print(ret)

26 a=1

27

28 def comput(formal):

29 re.sub('\s','',formal)

30 while(not formal.isdigit()):

31 ret = re.findall('\(([^()]*)\)',formal)

32 print(ret)

33 if ret:

34 for i in ret:

35 if '*'in i or '/' in i:

36 result_chengchu = chengchu(i)#先算乘除

37 else:

38 result_chengchu = i

39 if '+'in result_chengchu or '-' in result_chengchu:

40 result_addjian = addjian(result_chengchu)#再算加减

41 else:

42 result_addjian = result_chengchu

43

44 formal = re.sub('\(([^()]*)\)',str(result_addjian),formal,1)

45 else:

46 if '*' in formal or '/' in formal:

47 result_chengchu = chengchu(formal) # 先算乘除

48 else:

49 result_chengchu = formal

50 if '+' in result_chengchu or '-' in result_chengchu:

51 result_addjian = addjian(result_chengchu) # 再算加减

52 else:

53 result_addjian = result_chengchu

54 formal = result_addjian

55 print(formal)

56

57 comput(formul)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值