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

代码管理:

      代码已上传至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("恭喜你答对啦! ! !\n")
128     else:
129         print("很遗憾你答错了!正确答案是:", answer,"\n")
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

 

  

posted @ 2020-09-28 11:52  景行行止0618  阅读(236)  评论(0编辑  收藏  举报