需求要点
- 使用 -n 参数控制生成题目的个数
- 使用 -r 参数控制题目中数值(++自然数、真分数和真分数分母++)的范围,例如:
Myapp.exe -r 10
将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。
- 生成的题目中计算过程不能产生负数,==也就是说算术表达式中如果存在形如e1− e2的子表达式,那么e1≥ e2==。
- 生成的题目中如果存在形如==e1÷e2的子表达式==,那么==其结果应是真分数==。
- ==每道题目==中出现的==运算符个数不超过3个==。
(考虑:0,1,2,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文件(文件的写入)
其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。==(字符读取,计算装换)==
- 生成的题目的同时将答案保存在文件中(文件的读写)
==特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。== (?????)
- 程序应能支持一万道题目的生成。(存储??)
- ==程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计==,输入参数如下:
1 | Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt |
实质: 读取文件进行运算,然后依次“==”进行count,并记录
需求可以总结为三小块:
- 生成表达式
- 生成题目文件和答案文件
- 判定答案中的对错,并进行统计
思路参考:
计算表达式参考博客:http://www.mamicode.com/info-detail-2462079.html
涉及技术
Python fractions 模块
可以同时提供分子(numerator)和分母(denominator)给构造函数用于实例化Fraction类,但两者必须同时是int类型或者numbers.Rational类型,否则会抛出类型错误。当分母为0,初始化的时候会导致抛出异常ZeroDivisionError。
随机
random()
以下是 random() 方法的语法:
1 |
|
random.randint(2, 9) : 随机整数,2–9(包括2和9)
random.choice(String): 随机字符
字符相关
- 字符连接:
Python join()方法:
1 | Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。 |
egg:
1 |
|
以上实例输出结果如下:
1 | a-b-c |
数据结构
List : []
- pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
egg:
1 |
|
四则运算的计算:
参考: 表达式(四则运算)计算的算法:https://blog.csdn.net/gdutxiaoxu/article/details/50394930
Python将中缀表达式转换为后缀表达式
https://www.cnblogs.com/tworld/p/9709610.html
https://blog.csdn.net/sgbfblog/article/details/8001651
PSP2.1表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 20 |
Development | 开发 | 470 | |
· Analysis | · 需求分析 (包括学习新技术) | 150 | |
· Design Spec | · 生成设计文档 | 30 | |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | |
· Design | · 具体设计 | 30 | |
· Coding | · 具体编码 | 150 | |
· Code Review | · 代码复审 | 30 | |
·Test | · 测试(自我测试,修改代码,提交修改) | 40 | |
Reporting | 报告 | 75 | |
· Test Report | · 测试报告 | 25 | |
· Size Measurement | · 计算工作量 | 20 | |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | |
合计 |