1.GitHub地址:

https://github.com/RNG-Wh1t3zZ/the-four-fundamental-operations-of-arithmetic/blob/master/zy2.py

2.估计将在程序的各个模块的开发上耗费的时间。

 

 

PSP2.1Personal 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.运行测试及结果

6.问题

有时候在生成题目时有延迟

程序运行时间没有提升

程序运行时空间占用变多了

posted on 2020-09-27 13:19  阿炳1  阅读(169)  评论(0编辑  收藏  举报