随机生成两个数的四则运算
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(fraction(f1,f2))
1 def main(): 2 while 1: 3 print("输入类型序号: 1.测试 2.练习 3.退出") 4 t = int(input()) 5 if t == 3: 6 break 7 elif t == 1: ##测试 8 print("输入想要的四则运算序号: 1.整数 2.真分数 3.混合 4.退出") 9 n = int(input()) 10 while n > 4: 11 print("输入有误,重新输入") 12 n = int(input()) 13 if n == 4: 14 break 15 print("输入题目的数量", end=' ') 16 k = int(input()) 17 p = 100 / k 18 s = 0 19 q = [] 20 ans = [] 21 if n == 1: ##整数测试 22 for i in range(k): 23 c1(q, ans) 24 elif n == 2: ##分数测试 25 for i in range(k): 26 c2(q, ans) 27 elif n == 3: ##混合测试 28 for i in range(k): 29 n = random.randint(1, 3) 30 if n == 1: 31 c1(q, ans) 32 else: 33 c2(q, ans) 34 for i in range(k): 35 print("第{}题:{}".format(i + 1, q[i]), end=' ') 36 a = input() 37 if a == str(ans[i]): 38 s = s + p 39 print("所得的分数为:{}".format(s)) 40 print("是否查看正确答案:1.是 2.否", end=' ') 41 da = int(input()) 42 if da == 1: 43 for i in range(k): 44 print(q[i] + str(ans[i])) 45 46 47 48 elif t == 2: ##练习 49 print("输入想要的四则运算序号: 1.整数 2.真分数 3.混合 4.退出") 50 n = int(input()) 51 while n > 4: 52 print("输入有误,重新输入") 53 n = int(input()) 54 if n == 4: 55 break 56 print("输入题目的数量", end=' ') 57 k = int(input()) 58 q = [] 59 ans = [] 60 if n == 1: 61 for i in range(k): 62 c1(q, ans) 63 elif n == 2: 64 for i in range(k): 65 c2(q, ans) 66 elif n == 3: 67 for i in range(k): 68 n = random.randint(1, 3) 69 if n == 1: 70 c1(q, ans) 71 else: 72 c2(q, ans) 73 else: 74 print("输入有误!请重新输入") 75 76 for i in range(k): 77 print("第{}题:{}".format(i + 1, q[i]), end=' ') 78 a = input() 79 if a == str(ans[i]): 80 print("回答正确") 81 else: 82 print("回答错误,正确答案是:{}".format(ans[i])) 83 else: 84 print("输入有误!请重新输入") 85 86 profile.run('main()')
运行效果:
测试真分数的四则运算
练习混合型的四则运算:
效能分析:
可以看到所用时间为0.047s。