软件工程——四则运算py(我小学的时候怎么没用过这东西?)
题目:实现一个自动生成小学四则运算题目的命令行程序
github地址:https://github.com/ILTHEW/wc.git
主编:黄晖朝3116005178
助手:朱健栋3116005209
说明:
自然数:0, 1, 2, …。
• 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。
• 运算符:+, −, ×, ÷。
• 括号:(, )。
• 等号:=。
• 分隔符:空格(用于四则运算符和等号前后)。
• 算术表达式:
e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),
其中e, e1和e2为表达式,n为自然数或真分数。
• 四则运算题目:e = ,其中e为算术表达式。
3需求:
- 使用 -n 参数控制生成题目的个数,例如
Myapp.exe -n 10
将生成10个题目。
- 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如
Myapp.exe -r 10
将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。
- 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。
- 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
- 每道题目中出现的运算符个数不超过3个。
程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:- 四则运算题目1
四则运算题目2
……
其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。
在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:
- 答案1
答案2
特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。
- 程序应能支持一万道题目的生成。
- 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下:
Myapp.exe -e .txt -a .txt
统计结果输出到文件Grade.txt,格式如下:
Correct: 5 (1, 3, 5, 7, 9)
Wrong: 5 (2, 4, 6, 8, 10)
其中“:”后面的数字5表示对/错的题目的数量,括号内的是对/错题目的编号。为简单起见,假设输入的题目都是按照顺序编号的符合规范的题目。
未实现的功能
- 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计
- 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2
- 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题
遇到的问题
和我合作的小伙伴是用python的,而我比较偏向java,最终由于我技术不过硬,就用了python.
起初在思考怎么样随机生成运算符,生成运算符后怎么生成该种运算符的答案,后来上网发现,python的函数库中有这个函数,只要方便地调用就可以了。后来不知道怎么生成文档,后来上网查了一下,发现又是调用函数就可以了。就这样两个人慢慢地做了出来。
PSP表
效能分析
算法运行过程比较慢,没有使用数据结构进行优化,大量使用库函数,导致结果运行缓慢
设计实现过程
首先就是实现整数的四则运算,
然后就考虑分数的四则运算,
最后生成题目和答案到两个文件中。
代码说明
测试运行
一般
一万道题目
小结
两个人在一起探讨比一个人快很多,有效率很多,有时候一个人看不到的问题,另一个人可以看出来并及时地提醒。有什么不懂的地方就可以找度娘。两个人都从没有头绪开始,慢慢地找到了方向。这个看起来很简单的项目,对于我来说,是个不小的挑战,这也证明了我的水平还有待提高。一直害怕这个自己不熟悉的东西,不愿意去挑战它,最后只能在deadline前彻夜奋战,这种感觉不怎么好。还有就是,拖延症害死人。
软件工程——四则运算py(我小学的时候怎么没用过这东西?)的更多相关文章
- 软件工程——四则运算3(C#)
一.设计思想 设计两个窗体,在第一个窗体中选择功能参数,在第二个窗体中显示所出题目. 二.源代码 Form1.cs: using System; using System.Collections.Ge ...
- Java实现小学四则运算练习
Github项目地址:https://github.com/feser-xuan/Arithmetic.git 1.需求分析 软件基本功能要求如下: 程序可接收一个输入参数n,然后随机产生n道加减乘 ...
- Z-XML团队 软件工程课之我感我思我收获
<软件工程>这门课像我们的诤友,不断督促我们前进,又不断指引我们收获.时间飞逝,我们Z-XML团队一个个完成了课程中的所有任务,一步步走到了期末年末. 走的远了,也该回头看看.全员7人回顾 ...
- pytest-conftest.py作用范围
1.conftest.py解释 conftest.py是pytest框架里面一个很重要的东西,它可以在这个文件里面编写fixture,而这个fixture的作用就相当于我们unittest框架里面的s ...
- py中变量名的“秘密”
今天突然脑子发抽,想到py里有没有指针这个概念,于是我马上google.baidu了一波,发现网上大多都在说py.java.c#这类纯面向对象的编程语言用对象的概念能完全替代指针.那么问题来了,没有指 ...
- 在大型项目上,Python 是个烂语言吗
Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the ...
- Jupyter Notebook 27绝技——27 Jupyter Notebook tips, tricks and shortcuts
转载自:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/ Jupyter notebook, formerly ...
- 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)
转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...
- offer
八月份仿真实验室国赛以后,我并没有开始做一些关于找工作的准备,而是在做自己感兴趣的cocos2d-x,大概花了一个星期的时间从安装平台到查资料写了一个flappybird小游戏,将近开学了才把找工作的 ...
随机推荐
- laravel ServiceProvider 加载顺序
主要看一下代码: public function registerConfiguredProviders(){//读取app的配置,然后,分成两部分Illuminate开始的,和其他的 $provid ...
- (Review cs231n) CNN in Practice
Make the most of your data Data augmentation 加载图像后,对图像做一些变化,这些变换不改变图像的标签. 通过各种变换人为的增大数据集,可以避免过拟合提高模型 ...
- docker运行镜像报错:"write init-p: broken pipe"
docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting cont ...
- [转载]URI、 URL 和 URN 的区别
1. URI URI = Universal Resource Identifier 统一资源标志符 URI采用一种特定语法标识一个资源的字符串.所标识的资源可能是服务器上的一个文件.不过,也可能是一 ...
- wpf中插入winform控件并获取句柄
因工作需要使用wpf做界面,而有个开发包依赖picturebox控件,上网研究了一下,总算弄通了. 首先在项目中添加引用System.Windows.Forms与WindowsFormsIntegra ...
- eq
<a class="s">1</a> <a class="s">2</a> <a class=" ...
- Insert 导致死锁的两种情况
官档原文,懒得翻译了 https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html INSERT sets an exclusive lo ...
- iOS绘制坐标图,折线图-Swift
坐标图,经常会在各种各样的App中使用,最常用的一种坐标图就是折线图,根据给定的点绘制出对应的坐标图是最基本的需求.由于本人的项目需要使用折线图,第一反应就是搜索已经存在的解决方案,因为这种需求应该很 ...
- 完整的多文件上传实例(java版)
昨天刚刚做了一个文件列表上传,后端很简单,用 MultipartFile[] files 获取文件流数组,后端就当IO流操作就可以,似乎好像没啥好写的,但是!!!!!前端是真的糙单.要是自己写一个前端 ...
- The dependency `XXX` is not used in any concrete target.
1.在新建项目,引入CocoaPod时,当创建了podfile文件后,执行pod install时报一下错误 2.这是因为 这个第三方不知道用于哪个target,所以必须指定target 解决方案 ...