博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20180925-6 四则运算试题生成
阅读量:4668 次
发布时间:2019-06-09

本文共 3506 字,大约阅读时间需要 11 分钟。

此作业的要求参见:

具体实现功能如下

功能1:支持出题4个数的四则运算题目,所有题目要求作者有能力正确回答。(+10)

功能2:在功能1的基础上,支持括号。(+15)

功能3:限定题目数量,“精美”打印输出,且要避免重复,最好能输出到.txt文件中。且对输入题目数进行限定,题目数量必须是正整数。(+10)

功能4:支持分数出题和运算。(不完成此题不倒扣分数)

功能5:可把程序改成GUI版/web版/移植为android,ios版。

此次作业完成是以“结对编程”的形式完成,我的伙伴是刘欣,她的博客地址为:

本次编程采用面向过程的方法,先生成算式,然后将算式转为逆波兰表达式,再计算逆波兰表达式的值即为生成的算式的值。

功能1、2运行截图

……

功能3运行截图:

最后一条命令在根目录下生成文件result.txt,文件内容截图如下:

功能4对分数进行计算暂未能实现。

代码分析:

功能实现过程中,重要的是利用栈实现逆波兰和计算逆波兰的过程,重要代码片段如下:

1 class PyStack(object):      #自定义栈 2  3     def __init__(self, initSize = 20, incSize = 10): 4         self.initSize = incSize 5         self.incSize = incSize 6         self.stackList = [] 7         self.top = self.bottom = 0 8  9     def push(self, ele):10         if self.top-self.bottom >= self.initSize:11             self.incSize += self.initSize12         self.stackList.append(ele)13         self.top += 114 15     def pop(self):16         if self.top-self.bottom > 0:17             self.top -= 118             ret = self.stackList.pop()19             return ret20         else:21             return None22 23     def len(self):24         return self.top-self.bottom
stack
1 def reverse_polish(equation): 2     result = [] 3     c = [] 4     slist = [i for i in equation] 5  6     for item in slist: 7         if item in range(0, 100): 8             result.append(item) 9         elif not c and item in cal.keys():10             c.append(item)11             continue12         elif c and item in cal.keys():13             for x in range(c.__len__()):14                 z = c[-1]15                 temp = cal[z] if z in cal else cal1[z]16                 if temp >= cal[item]:17                     result.append(c.pop())18                 else:19                     c.append(item)20                     break21             if not c:22                 c.append(item)23         elif item is ")":24             for x in range(c.__len__()):25                 if c[-1] == "(":26                     c.pop()27                     break28                 else:29                     result.append(c.pop())30         elif item is "(":31             c.append(item)32         # print(result,c)33     for x in range(c.__len__()):34         result.append(c.pop())35     return result
RPN
1 def calculate(re_equation): 2     stack = PyStack() 3     sumEnd = 0 4  5     if len(re_equation) is 0: 6         return sumEnd 7     for i in re_equation: 8         if i in range(0, 100): 9             stack.push(float(i))10         elif '+' is i:11             a = stack.pop()12             b = stack.pop()13             stack.push(b + a)14         elif '-' is i:15             a = stack.pop()16             b = stack.pop()17             stack.push(b - a)18         elif '*' is i:19             a = stack.pop()20             b = stack.pop()21             stack.push(b * a)22         elif '÷' is i:23             a = stack.pop()24             b = stack.pop()25             if a == 0:26                 return False             #print('%d/%d分子不能为0' % (b, a))27             else:28                 stack.push(b / a)29     return stack.pop()
calculate

结对感想:

 本次结对,整体来说是很和谐的。在函数的数量和设计上有过很深刻的讨论,但总体意见是一致的。

在制定代码规范时,我们参考了python书写的基本的一些规范,编写代码的过程中相互监督,基本上能做到及时提醒及时改正。

通过本次编程,更深刻的感受到了python语言的强大。其中栈的实现是借用了别人写的模块,然后处理了一下接口就很顺利的完成了后续对栈的应用。

对生成的算式处理的过程中,我们又重拾了对逆波兰的认识,忍不住感慨:啊原来逆波兰是后缀表达式来着。

两个人编程,一个编写代码,一个领航,很好的弥补了自己个人编程时编着编着就迷糊脑子乱掉的弊端,可以相互提醒,弥补对方没想到的东西,两个人考虑问题的完整性总归是比一个人要好的,可以更好地保证代码的质量。而且遇到问题,两个人一起想办法解决的感觉是很好的,可以有更多的思路或更快的找到解决方法。

照片(地点:宿舍):

 

转载于:https://www.cnblogs.com/ruidxr/p/9746141.html

你可能感兴趣的文章
Spring MVC 文件上传 & 文件下载
查看>>
C++中print和printf的区别
查看>>
service程序改为windows窗体展示
查看>>
查询集 QuerySet
查看>>
ios 键盘的一些问题
查看>>
mac上使用终端生成RSA公钥和密钥
查看>>
jQuery-点击按钮页面滚动到顶部,底部,指定位置
查看>>
[原创]group by和compute 的使用
查看>>
9.13列表的用法
查看>>
secureCRT 如何上传下载文件
查看>>
Spring Cloud Config
查看>>
phoneGap实现离线缓存
查看>>
第六周学习进度
查看>>
java学习之—链表(3)
查看>>
【TDS学习文档5】IBM Directory schema的管理3——attributes
查看>>
Codeforces Round #572 (Div. 2)B
查看>>
day 107radis非关系型数据库
查看>>
python re模块
查看>>
程序猿的爱情--2011-01-05
查看>>
loj#2073. 「JSOI2016」扭动的回文串
查看>>