四则运算的递归python实现
来源:互联网 发布:musecc 2018mac破解版 编辑:程序博客网 时间:2024/06/03 04:57
本文采用中国慕课网上的《程序设计与算法2》郭老师的方法进行。
问题:(1+(2*3+4)/2+4/2)程序用来解决这种四则运算,全部是整数。
首先,清晰下解决的问题。这是一个表达式子,他是由项组成,项之间的运算是可以相加减。项是由因子组成,因子之间可以乘或者除。因子有两种情况,一种是一个整数,或者是一个表达式,例如,(1+2+3)×3,其中前面的(1+2+3)就是一个表达式。
因此,这种逻辑关系非常清晰,也利于接下来写程序。主要由三个函数组成,表达式函数,项函数term_value,因子函数factor_value。函数读字符串,然后返回先计算出的结果值和剩余的表达式。程序代码如下:
def calculate(a): result,a = term_value(a) # read the first term if len(a)==0: return result,a boo = True i =0 while len(a)>0 and boo: #把表达式的所有项追个检查出来 if a[i] =='+': #加 a = a[1:] res,a = term_value(a) result+=res elif a[i]=='-': #减 a = a[1:] res,a = term_value(a) result-=res elif a[i] == ')' : #这个部分处理的不好,因为下面去掉了(,没有去掉),所以这里特地去掉了。郭老师的c++程序貌似没有这个过程 a = a[1:] else: boo = False return result,a def term_value(a): #把所有项的因子全部检查出来,比如1*2*3*4/5*(1+2) if len(a) ==1: return int(a),'' #这段似乎重复了 result,a= factor_value(a) #开始检查第一个因子,把运算结果都叠加都这个上 boo = True i =0 while len(a)>0 and boo: #其余因子,并把结果跟第一个相乘或者相除 if a[i]=='*': #乘 a = a[1:] result = factor_value(a)[0]*result a = factor_value(a)[1] elif a[i]=='/': #除 a = a[1:] result = result/factor_value(a)[0] a = factor_value(a)[1] else: boo = False return result,a def factor_value(a): #检查因子 if a[0]=='(': #因子是一个表达式 a = a[1:] return calculate(a) else: #因子是一个整数的情况 s = 0 i = 0 while i<len(a) and a[i].isdigit(): s = s*10+int(a[i]) a =a[1:] return s,ab ='1+1*8+3+(1+2)+((4/2)*2)'print(calculate(b))
阅读全文
0 0
- 四则运算的递归python实现
- python 实现四则运算(一)
- python对字符串实现四则运算
- 四则运算的实现
- 大数四则运算的实现
- C#四则运算的实现
- 四则运算的实现
- 四则运算的实现
- 四则运算的C++实现
- python实现递归的例子
- 强大的Python大数四则运算
- 大数四则运算的C++实现
- Java实现四则运算的解析
- 汇编实现的加减乘除四则运算
- 大数四则运算的C++实现
- 大数四则运算的C++实现
- java 四则运算 栈的实现
- java 四则运算 栈的实现
- 使用@Async实现异步调用
- CSV格式整理,去除与上一行数据重复的单元格
- 画饼图
- Relevant Search.pdf 英文原版 免费下载
- 浅析map和multimap应用的小程序
- 四则运算的递归python实现
- 简单的MVP写法(一)
- node.js
- 豆瓣项目的思路总结
- Learning Django Web Development.pdf 英文原版 免费下载
- jenkins 构建脚本时javac编译出错自动停止任务
- scss
- Linux(CentOs) 下安装 Mysql
- Android Animation 之 View Animation(补间动画)