标签:结果 amp 代码规范 ESS sig ror 错误 开发 测试
代码地址:https://github.com/kriswang10/kriswang10.github.io/blob/master/calculate.py
首先拿到题目的思路比较乱,整理了一下分成两大块,一块用于随机生成一道随机计算题,另一块则由用户自己要求题目数量,由系统随机生成。
由于是给小学生的题目,将生成函数分为两类,一类为生成整数型的四则运算为newint()函数,另一类则是分数型的为newfra()函数。其中整数型的数字范围在0-20,分数型则在
0-10取分数,而且所有运算都先通过比较大小来避免产生负数。
主函数则先由用户选择进行哪块来达成需求,为降低难度,产生的随机题目会尽量出现更多的整数型计算,也由随机数来决定,用户可以在输入0000后退出程序。
以下为源代码
import time
def newint():
    sym=[‘+‘,‘-‘,‘ב,‘÷‘]
    fh=random.randint(0,3)
    n1=random.randint(1,20)
    n2=random.randint(1,20)
    result=0
    if fh == 0:
        result=n1+n2
    elif fh == 1:
        n1,n2=max(n1,n2),min(n1,n2)
        result=n1-n2
    elif fh == 2:
        result=n1*n2
    elif fh == 3:
        n1,n2=max(n1,n2),min(n1,n2)
        while n1%n2 !=0:
            n1=random.randint(1,10)
            n2=random.randint(1,10)
            n1,n2=max(n1,n2),min(n1,n2)
        result=int(n1/n2)
    print(n1,sym[fh],n2,‘=‘,end=‘ ‘)
    return result
def newfra():
    sym=[‘+‘,‘-‘,‘ב,‘÷‘]
    fh=random.randint(0,3)
    t1=random.randint(1,10)
    t2=random.randint(t1,10)
    n1=Fraction(t1,t2)
    t1=random.randint(1,10)
    t2=random.randint(t1,10)
    n2=Fraction(t1,t2)
    result=0
    if fh == 0:
        result=n1+n2
    elif fh == 1:
        n1,n2=max(n1,n2),min(n1,n2)
        result=n1-n2
    elif fh == 2:
        result=n1*n2
    elif fh == 3:
        n1,n2=max(n1,n2),min(n1,n2)
        result=n1/n2
    print(n1,sym[fh],n2,‘=‘,end=‘ ‘)
    return result
def newtest():
    sym=[‘+‘,‘-‘,‘ב,‘÷‘]
    n=int(input())
    result=[]
    m=0
    while m<=(n-1):
        fh = random.randint(0,4)
        if fh ==0:
            print(m+1,end=‘、‘)
            result.append(newfra())
            print(‘ ‘)
        else:
            print(m+1,end=‘、‘)
            result.append(newint())
            print(‘ ‘)
        m = m + 1
    m=0
    print(‘答案:‘)
    while m <=(n-1):
          print(m+1,‘、‘,result[m])
          m = m + 1
def main():
    print(‘1、四则运算‘)
    print(‘2、制作题库‘)
    n=int(input())
    if n == 1:      
        print(‘input"0000"to Quit‘)
        while True:
            fh = random.randint(0,4)
            if fh == 0:
                result=newfra()
                jg=input()
                if jg == ‘0000‘:
                    break;
                ans = Fraction(jg)
                if ans == result:
                    print(‘right‘)
                else:
                    print(‘error,the right answer is‘,result)
            else:
                result= newint()
                jg = input()
                if jg == ‘0000‘:
                    break;
                ans = Fraction(jg)
                if ans == result:
                    print(‘right‘)
                else:
                    print(‘error,the right answer is‘,result)
    if n==2:
        print(‘需要制作多少道题目:‘)
        newtest()
if __name__==‘__main__‘:
    main()
程序测试:


以上为程序的简单测试,未出现明显BUG或错误,以下为我用python自带的cProfile函数做的效能分析
 
 


当程序作出10000道题目时也迅速给出了结果,程序中的算法可能还有待提升,但基本满足要求且迅速。
PSP:
  | 
 
标签:结果 amp 代码规范 ESS sig ror 错误 开发 测试
原文地址:https://www.cnblogs.com/kriswang/p/10571495.html