Github项目地址:
https://github.com/123diandian/sizeyunsuan
PSP:
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 |
20 |
Estimate |
估计这个任务需要多少时间 |
1440 |
2200 |
Development |
开发 |
700 |
200 |
Analysis |
需求分析 (包括学习新技术) |
180 |
100 |
Design Spec |
生成设计文档 |
5 |
5 |
Design Review |
设计复审 (和同事审核设计文档) |
10 |
15 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
5 |
10 |
Design |
具体设计 |
40 |
30 |
Coding |
具体编码 |
300 |
400 |
Code Review |
代码复审 |
30 |
40 |
Test |
测试(自我测试,修改代码,提交修改) |
30 |
20 |
Reporting |
报告 |
120 |
100 |
Test Report |
测试报告+博客 |
120 |
120 |
Size Measurement |
计算工作量 |
10 |
15 |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
40 |
60 |
合计 |
3040 |
3335 |
题目要求:
能自动生成小学生四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)
除了整数外,还支持真分数的四则运算
解题思路:
- 定义一个函数随机生成两个整数,并进行四则运算
- 定义一个函数随机生成两个真分数,再定义一个函数对两个真分数进行四则运算(调用Fraction函数进行分数运算)
- 用户输入自己的要求
- 计算结果与用户的输入进行对比
设计函数:
- 定义一个函数随机生成两个正整数并进行四则运算(减数要比被减数小;除数不能等于0且当被减数大于一时,除数要能整除被除数)
- 定义一个函数随机生成两个真分数,再定义一个函数对两个真分数进行四则运算(调用Fraction函数进行分数运算;分母不能为0,且除数即生成的第二个分数不能等于0)
具体程序设计:
成员变量
成员名 |
类型 |
功能 |
t |
int |
输入测试类别,1.测试 2.练习 3.退出 |
n |
int |
输入运算类别,1.整数 2.真分数 3.混合 4.退出 |
k |
int |
输入题目的数量 |
p |
float |
每道题的分数 |
s |
float |
总的得分 |
q |
列表 |
存储表达式 |
ans |
列表 |
存储计算结果 |
da |
int |
是否查看答案,1.是 2.否 |
a |
字符串 |
用户计算的答案 |
成员函数
函数名 |
功能 |
c1(q, ans) |
两个整数的四则运算 |
creatF() |
随机生成两个真分数 |
c2(q, ans) |
两个真分数的四则运算 |
main() |
主函数 |
核心代码:
1 ##两个整数的四则运算 2 def c1(q, ans): 3 symbol = random.choice(['+', '-', '*', '/']) # 生成随机符号 4 if symbol == '+': 5 n1 = random.randint(0, 100) 6 n2 = random.randint(0, 100) 7 q.append(str(n1) + '+' + str(n2) + '=') 8 ans.append(n1 + n2) 9 elif symbol == '-': 10 n1 = random.randint(0, 100) 11 n2 = random.randint(0, n1 + 1) 12 q.append(str(n1) + '-' + str(n2) + '=') 13 ans.append(n1 - n2) 14 elif symbol == '*': 15 n1 = random.randint(0, 100) 16 n2 = random.randint(0, 100) 17 q.append(str(n1) + '×' + str(n2) + '=') 18 ans.append(n1 * n2) 19 else: 20 n1 = random.randint(0, 100) 21 if n1 == 0: 22 n2 = random.randint(1, 100) 23 else: 24 n2 = random.randint(1, n1 + 1) 25 while n1 % n2: 26 n1 = random.randint(1, 100) 27 n2 = random.randint(1, n1 + 1) 28 q.append(str(n1) + '÷' + str(n2) + '=') 29 ans.append(Fraction(n1, n2))
1 ##随机生成两个真分数 2 def createF(): 3 fz1 = random.randint(0, 100) 4 if fz1 == 0: 5 fm1 = random.randint(1, 100) 6 else: 7 8 fm1 = random.randint(fz1, 100) 9 f1 = Fraction(fz1, fm1) 10 fz2 = random.randint(1, 100) 11 fm2 = random.randint(fz2, 100) 12 f2 = Fraction(fz2, fm2) 13 return f1, f2
1 ##两个真分数的四则运算 2 def c2(q,ans): 3 symbol = random.choice(['+','-','*','/']) 4 f1,f2 = createF() 5 if symbol =='+': 6 while f1+f2>1: 7 f1,f2 = createF() 8 q.append(str(f1)+'+'+str(f2)+'=') 9 ans.append(f1+f2) 10 elif symbol =='-': 11 f1,f2 = max(f1,f2),min(f1,f2) 12 q.append(str(f1)+'-'+str(f2)+'=') 13 ans.append(f1-f2) 14 elif symbol == '*': 15 while f1*f2>1: 16 f1,f2 = createF() 17 q.append(str(f1)+'×'+str(f2)+'=') 18 ans.append(f1*f2) 19 else: 20 while f1/f2>1: 21 f1,f2=createF() 22 q.append(str(f1)+'÷'+str(f2)+'=') 23 ans.append(Fractio