• 自动生成小学生题目(改进)


    代码管理:

          代码已上传至Gitee:https://gitee.com/above-the-clouds/codes/go85ra14ine092jzcxklm46

    一、改进方向

    功能改进:

      (1)分年级:分为1-2和3-6,1-2年级是做加减运算,而3-6则是加减乘除都做

       (2)分模式:分为做题模式(题库)和答题模式

       (3)分形式:整数和分数运算

    二、解题思路

    第一步:我认为分年级比较容易,所以我就先加入分年级这个功能。联系现实中1-2年级还没有学乘除法,所以1-2年级只做加减运算,而3-6年级则是加减乘除都有。实现这里指要控制运算符的选择就可以了。即1-2年级只能从“+”和“-”中选,而高年级的则有四种选择“+-*、”。

    第二步:加入模式,因为这是改进,而我的第一版就是做题模式,所以我只要加进答题模式就可以了。答题模式即题目统一输出,这就需要用一个循环,把所有题目一起输出,再用一个数组把所有的答案存起来,最后在一起输出答案。 

    第三步:我觉得做分数运算是最难的,所以我把它放到了最后。首先随机生成两个数,大的数做分母,且不能为0,这样就保证为真分数,再调用Fraction()生成一个分数,运算时需要注意做减法时不能结果为负数,做除法时结果要还是分数,即还要调用Fraction()

    三、设计实现

    1、分年级:def chooseGrade()

    2、分模式:def choosePattern():

    3、分形式:def chooseShape()

    4、题库:def test(grade,shape)

    5、分数运算:def fractions()

    6、整数运算:def integer(grade)

    7、结果显示:def result(grade,shape)

    8、主函数:def main()

    四、代码展示

      1 # -*- coding: utf-8 -*-
      2 """
      3 function:自动生成小学四则运算题目(升级)
      4          (1)分年级:1-2和3-6
      5          (2)分两种模式:
      6                  模式1-做题模式
      7                  模式2-题库模式
      8          (3)分形式:整数、真分数
      9 """
     10 
     11 import profile
     12 import random
     13 from fraction import Fraction
     14 
     15   
     16 def chooseGrade():      #年级分为两个阶段:1-2和3-6
     17     grade=int(input("请输入你的年级:"))
     18     return grade
     19         
     20         
     21 def choosePattern():    #分为两个模式:模式1-做题模式  模式2-题库模式
     22     pattern=int(input("请输入你要的模式(1-做题模式  2-题库模式):"))
     23     return pattern
     24         
     25 
     26 def chooseShape():  #是整数还是分数计算
     27     shape=int(input("请输入你想要的形式(1-整数形式  2-分数形式):"))
     28     return shape
     29 
     30 
     31 def test(grade,shape): #题库        
     32     numOfQuestion=int(input("生成的题目的数量:"))
     33     answ =[]
     34     if shape==1:    #整数题库
     35         for i in range(numOfQuestion): 
     36             print(i+1,end='')
     37             answer=integer(grade)
     38             answ.append(answer)
     39     elif shape==2:  #分数题库
     40         for i in range(numOfQuestion): 
     41             print(i+1,end='')
     42             answer=fractions()
     43             answ.append(answer)
     44     print("请输入你的答案(有小数则保留两位小数):")
     45     for i in range(numOfQuestion): 
     46         print(i+1,"",end='')
     47         yoursAns=input()
     48     print('正确答案:') 
     49     for i in range(numOfQuestion):            
     50         print(i+1,"",answ[i])
     51     
     52                 
     53 def fractions(): #分数题目
     54     operator=random.choice("+-*/")
     55     numerator1 = random.randint(1, 20)    
     56     denominator1 = random.randint(numerator1, 20)   #做分母,控制为真
     57     fract1 = Fraction(numerator1, denominator1)     #生成分数
     58     numerator2 = random.randint(1, 20)
     59     denominator2 = random.randint(numerator2, 20)
     60     fract2 = Fraction(numerator2, denominator2) 
     61     if operator=="+":
     62         answer=fract1 + fract2
     63         
     64     elif operator=="-":
     65         fract1,fract2=max(fract1,fract2),min(fract1,fract2) #大的数放前面
     66         answer=fract1 - fract2
     67         
     68     elif operator=="*":
     69         answer=fract1 * fract2
     70         
     71     elif operator=="/":
     72         answer=fract1 / fract2
     73     print(fract1,operator,fract2,'=')
     74     ''' 
     75     #分数的转换
     76     nume=answer.numerator  #分子
     77     deno=answer.denominator  #分母
     78     if nume%deno==0:  #为整数
     79         return '%d'%(nume/deno)
     80     elif nume<deno:  #为真分数
     81         return '%d%s%d' % (nume,'/',deno)
     82     else:       #为带分数
     83         an=int(nume/deno)
     84         nume = nume - an * deno
     85         return '%d%s%d%s%d' % (an,'’',nume,'/',deno)'''
     86     return answer
     87 
     88       
     89 def integer(grade):  #整数题目
     90     numberOne=random.randint(1,100)
     91     numberTwo=random.randint(1,100)
     92     #grade=int(input("请输入你的年级:"))
     93     #grade=chooseGrade()                                    
     94     if grade==1 or grade==2 :
     95         operator=random.choice("+-")  #1-2年级只做加减运算
     96     elif grade==3 or grade==4 or grade==5 or grade==6:
     97         operator=random.choice("+-*/")  #3-6年级则加减乘除运算都有
     98         
     99     if operator=="+":
    100         answer=numberOne + numberTwo
    101         
    102     elif operator=="-":
    103         numberOne , numberTwo=max(numberOne , numberTwo),min(numberOne , numberTwo) #大的数放前面
    104         answer=numberOne - numberTwo
    105         
    106     elif operator=="*":
    107         answer=numberOne * numberTwo
    108         
    109     elif operator=="/":
    110         answer=numberOne / numberTwo
    111         if answer % 1 != 0:
    112             answer = ('%.2f' %answer)     #不能整除时取两位小数
    113     print("题目:",numberOne,operator,numberTwo,"=")
    114     return answer
    115 
    116 
    117 def result(grade,shape):  #判断你是否回答正确,并返回结果
    118     if shape==1:
    119         answer=integer(grade)
    120         yourAnswer=int(input("请输入你的答案(有小数则保留两位小数):"))
    121  
    122     elif shape==2:
    123         answer=fractions()
    124         yourAnswer=input("请输入你的答案:")
    125         yourAnswer=Fraction(yourAnswer)
    126     if yourAnswer==answer:
    127         print("恭喜你答对啦! ! !
    ")
    128     else:
    129         print("很遗憾你答错了!正确答案是:", answer,"
    ")
    130  
    131      
    132 def main():     #主函数
    133     pattern=choosePattern()
    134     grade=chooseGrade()
    135     shape=chooseShape()
    136     if pattern==1:  #答题模式
    137         numOfQuestion=int(input("生成的题目的数量:"))
    138         for i in range(numOfQuestion):
    139             print("",i+1,"题: ")       
    140             result(grade,shape)
    141     elif pattern==2:    #题库模式
    142         test(grade,shape)
    143     #profile.run('fractions()') #性能测试   
    144     #profile.run('test(6,2)')    #换成实参
    145     #profile.run('integer(6)')    
    146     
    147     
    148        
    149 main()
    150 
    151   
    View Code

    五、结果显示

     1、做题模式、整数运算

    2、做题模式、分数运算

    3、题库模式、整数运算

    六、性能分析

    1、fractions()

    2、test(grade,shape)

    3、integer(grade)

    七、PSP表格

     PSP  personal Software Process Tages 预估耗时(分钟)  实际耗时(分钟) 
     Planning 计划   25 15
     Estimate 估计这个任务需要多少时间  10  8
     Development 开发  65 61
    Analysis   需求分析 30 32 
    Design Spec  生成设计文档 32 28
    Design Review  设计复审(审核设计文档)  10 8
    Coding Standerd  代码规范(为目前的开发制定合适的规范)    3
     Design  具体设计 40 58
    Coding  具体编码  400 478
    Code Review   代码复审  58 72 
     Text  测试(自测,修改代码,提交修改) 30  43 
     Reporting  报告 32   34
    Text Report  测试报告 6 8
     Size Measurement 计算工作量  7
     Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 20  28 
    Sum  合计 770 885

     

      

  • 相关阅读:
    浅析Linux操作系统是如何工作的(思维导图)
    【Git】创建一个空分支
    ubuntu13.04更新源
    【Linux操作系统分析】设备驱动处理流程
    django-xss攻击原理与防范
    django—xadmin中集成富文本编辑器ueditor
    垃圾回收机制
    元组-不仅仅是不可变的列表
    不一样的列表
    Python数据模型
  • 原文地址:https://www.cnblogs.com/sun0618-/p/13742573.html
Copyright © 2020-2023  润新知