四则运算
1.GitHub地址:
https://github.com/luorun194154/sizeyunsuan/tree/master
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.运行测试及结果

浙公网安备 33010602011771号