题目描述:
通过python语言编写一个能够自动生成小学四则运算的程序(注意是给小学生用的,要是结果出现负数的话他们会很迷茫的!),同时,除了整数外,还要支持真分数的四则运算.
程序设计:
首先先确定是几个数字做运算,我先定的是2个数字的加减法算数,写一个为自动随机抽选2个数字和1个运算符号的函数,再另写一个则是将它们的计算其结果。针对分数运算写一个转化形式的函数,不能出现无限循环小数例如3.333333...这类型,应当直接输出1/3。
Github代码地址:https://github.com/sakuraocean/Python-learning
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 30 | 50 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 50 |
Development | 开发 | 280 | 515 |
· Analysis | · 需求分析 (包括学习新技术) | 60 | 120 |
· Design Spec | · 生成设计文档 | 25 | 40 |
· Design Review | · 设计复审 (和同事审核设计文档) | 35 | 55 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 35 |
· Design | · 具体设计 | 20 | 35 |
· Coding | · 具体编码 | 50 | 125 |
·Code Review |
· 代码复审
|
40 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 30 | 50 |
Reporting | 报告 | 100 | 180 |
· Test Report | · 测试报告 | 30 | 50 |
· Size Measurement | · 计算工作量 | 50 | 90 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 | 20 | 40 |
合计 | 410 | 745 |
先是生成随机符号和随机数字
1 def c1(q, ans): 2 symbol = random.choice(['+', '-', '', '/']) # 生成随机符号 3 if symbol == '+': 4 n1 = random.randint(0, 20) 5 n2 = random.randint(0, 20) 6 q.append(str(n1) + '+' + str(n2) + '=') 7 ans.append(n1 + n2) 8 elif symbol == '-': 9 n1 = random.randint(0, 20) 10 n2 = random.randint(0, 20) 11 n1,n2 = max(n1,n1),min(n1,n2)#防止出现负数 12 q.append(str(n1) + '-' + str(n2) + '=') 13 ans.append(n1 - n2) 14 elif symbol == '': 15 n1 = random.randint(0, 20) 16 n2 = random.randint(0, 20) 17 q.append(str(n1) + '×' + str(n2) + '=') 18 ans.append(n1 * n2) 19 else: 20 n1 = random.randint(0, 20) 21 if n1 == 0: 22 n2 = random.randint(1, 20) 23 else: 24 n2 = random.randint(1, n1 + 1) 25 q.append(str(n1) + '÷' + str(n2) + '=') 26 ans.append(Fraction(n1, n2))
生成随机分数
1 def createF(): 2 fz1 = random.randint(0, 20) 3 if fz1 == 0: 4 fm1 = random.randint(1, 20) 5 else: 6 fm1 = random.randint(1, 20) 7 f1 = Fraction(fz1, fm1) 8 fz2 = random.randint(1, 20) 9 fm2 = random.randint(20, 20) 10 f2 = Fraction(fz2, fm2) 11 return f1, f2
将分数转化为人看得懂的形式
def f(f):#分数的转换 a=f.numerator #分子 b=f.denominator #分母 if a%b==0:#为整数 return '%d'%(a/b) elif a<b:#为真分数 return '%d%s%d' % (a,'/',b) else:#为带分数 c=int(a/b) a = a - c * b return '%d%s%d%s%d' % (c,'’',a,'/',b)
四则运算核心——计算结果
1 def c2(q,ans): 2 symbol = random.choice(['+','-','','/']) 3 f1,f2 = createF() 4 if symbol =='+': 5 while f1+f2>1: 6 f1,f2 = createF() 7 q.append(str(f1)+'+'+str(f2)+'=') 8 ans.append(f1+f2) 9 elif symbol =='-': 10 f1,f2 = max(f1,f2),min(f1,f2)#防止出现负数 11 q.append(str(f1)+'-'+str(f2)+'=') 12 ans.append(f1-f2) 13 elif symbol == '': 14 while f1*f2>1: 15 f1,f2 = createF() 16 q.append(str(f1)+'×'+str(f2)+'=') 17 ans.append(f1*f2) 18 else: 19 while f1/f2>1: 20 f1,f2=createF() 21 q.append(str(f1)+'÷'+str(f2)+'=') 22 ans.append(Fraction(f1,f2))
运行效果如下
利用profile测试时间如下图