代码地址:https://github.com/kriswang10/kriswang10.github.io/blob/master/calculate.py
首先拿到题目的思路比较乱,整理了一下分成两大块,一块用于随机生成一道随机计算题,另一块则由用户自己要求题目数量,由系统随机生成。
由于是给小学生的题目,将生成函数分为两类,一类为生成整数型的四则运算为newint()函数,另一类则是分数型的为newfra()函数。其中整数型的数字范围在0-20,分数型则在
0-10取分数,而且所有运算都先通过比较大小来避免产生负数。
主函数则先由用户选择进行哪块来达成需求,为降低难度,产生的随机题目会尽量出现更多的整数型计算,也由随机数来决定,用户可以在输入0000后退出程序。
以下为源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
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:
|
|
原文:https://www.cnblogs.com/kriswang/p/10617411.html