• 四则运算升级


    1)GitHub地址:

    https://github.com/zheng-xiao-yi/2/tree/master

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

    PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
    Planning 计划  25 20 
    · Estimate · 估计这个任务需要多少时间  420 420
    Development 开发  /
    · Analysis · 需求分析 (包括学习新技术)  25 10 
    · Design Spec · 生成设计文档  20  
    · Design Review · 设计复审 (和同事审核设计文档)  /
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范)  15 15
    · Design · 具体设计  30  20
    · Coding · 具体编码 100 110 
    · Code Review · 代码复审  30 20 
    · Test · 测试(自我测试,修改代码,提交修改) 40   40
    Reporting 报告  15 15 
    · Test Report · 测试报告  10 10 
    · Size Measurement · 计算工作量  10 10 
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划  20 20 
    合计    445  
    440

    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
    

      4)运行测试及结果

     

     

     

     

     

     5)问题

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

    ②括号的位置有的时候会很奇怪

    ③程序运行时间没有提升

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

  • 相关阅读:
    bzoj-2748 2748: [HAOI2012]音量调节(dp)
    bzoj-2338 2338: [HNOI2011]数矩形(计算几何)
    bzoj-3444 3444: 最后的晚餐(组合数学)
    codeforces 709E E. Centroids(树形dp)
    codeforces 709D D. Recover the String(构造)
    codeforces 709C C. Letters Cyclic Shift(贪心)
    codeforces 709B B. Checkpoints(水题)
    codeforces 709A A. Juicer(水题)
    Repeat Number
    hdu 1003 Max Sum (动态规划)
  • 原文地址:https://www.cnblogs.com/13128870440-zxy/p/13737330.html
Copyright © 2020-2023  润新知