四则运算升级
1.GitHub地址:
https://github.com/RNG-Wh1t3zZ/the-four-fundamental-operations-of-arithmetic/blob/master/zy2.py
2.估计将在程序的各个模块的开发上耗费的时间。
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 25 |
· Estimate | · 估计这个任务需要多少时间 | 480 | 480 |
Development | 开发 | / | / |
· Analysis | · 需求分析 (包括学习新技术) | 20 | 10 |
· Design Spec | · 生成设计文档 | 20 | 20 |
· Design Review | · 设计复审 (和同事审核设计文档) | / | / |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 15 |
· Design | · 具体设计 | 30 | 20 |
· Coding | · 具体编码 | 90 | 120 |
· Code Review | · 代码复审 | 30 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 40 | 40 |
Reporting | 报告 | 15 | 15 |
· Test Report | · 测试报告 | 10 | 10 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
合计 | 510 | 505 |
3.功能升级(较原先的版本)
升级的功能:
①输入年级时,如果输入的不是小学的年级且次数超过3次则考试分数为0
②在生成题目时增加了括号运算,且只有在符号为“+,-”时选择是否加上括号,且括号内只有两个数
③输入可以为分数也可以为整数
④题目难度被分为三个阶段:1-2,3-4,5-6
⑤判断输入的结果是否为以约分的,如果不是,则为错误
4.增加的主要函数
对应3)中的⑤,小学数学题目中要求结果要约分,所以增加了这个函数
def gongyinshu(sum1,sum2): #判断输入的数是否为约分后的数,如果还可以约分,则为错误 if(sum1>sum2): a=sum1 b=sum2 else: a=sum2 b=sum1 while(a%b!=0): t=b b=a%b a=t if(b==1): return 1 else: return -1
对应3)中的③,输入分数时不能直接用float()将输入的字符串转化成数字,所以增加这个函数
def jieguozhuanhuan(jieguo): #将输入的答案转化为数字 temp = 0 sum1 = 0 sum2 = 0 jieguo = jieguo +'/' for i in jieguo: if(i != '/'): temp = temp*10+int(i) elif(sum1==0): sum1=temp/10 temp = 0 else: sum2 = temp/10 temp = 0 if(sum2 != 0): sum = sum1/sum2 if(gongyinshu==-1): return -1 else: sum = sum1 return Fraction('{}'.format(sum)).limit_denominator()
对应3)中的④,小学数学题目和年级有一定的关系,需要划分难度等级,一二年级的同学难度较低,三四年级难度高一些,五六年级最难
def timu(nianji,n): #生成题目,返回题目和答案 if(nianji<=2): #2年级以下只用做10以内的加减法 shuzi=[random.randint(1,10)for i in range(n)] fuhao=[random.choice(['+','-'])for i in range(n-1)] elif(nianji<=4): shuzi=[random.randint(1,10)for i in range(n)] #4,3年级需要会10以内的四则运算 fuhao=[random.choice(['+','-','*','/'])for i in range(n-1)] else: shuzi=[random.randint(1,100)for i in range(n)] #5,6年级的题目为100以内的四则运算 fuhao=[random.choice(['+','-','*','/'])for i in range(n-1)] for i in range(n-1): if(fuhao[i]=='/'): #分数全为真分数 while(shuzi[i]>=shuzi[i+1]): shuzi[i]=random.randint(1,shuzi[i+1]) if(nianji>2): fuhao = kuohao(fuhao,n) ti=lianjie(fuhao,shuzi,n) daan = jisuan(shuzi,fuhao,n) return daan,ti
对应3)中的②,在题目中加上()运算,由于题目长度不同,加的位置不能固定,所以在确定这个位置是否添加()是用随机函数randint(0,1)决定的,0不添加,1添加
def kuohao(fuhao,n): #如果temp为1.则生成括号,反之,则不 i=0 f=[] while(i<len(fuhao)): if (i != 0 and (f[len(f)-1] != ')' and f[len(f)-1] != '(') and (fuhao[i] == '+' or fuhao[i] == '-')): temp = random.randint(0,1); if(temp == 1): f.append('(') f.append(fuhao[i]) f.append(')') i=i+1 continue f.append(fuhao[i]) i = i+1 return f
5.运行测试及结果