题目:
(1)能自动生成小学四则运算题目,并且不能出现负数;
(2)能支持真分数的四则运算;
思路:
(1)四则运算加减乘除,采用两个随机数,由于不能出现负数,则对两个随机数进行比较大小再进行减法运算,除法一向特殊,所以在随机数的取值范围中设置不包括0。
(2)真分数运算在pycharm中导入fractions库,其余类似
|
实现过程:
设计三个函数:
def newint() 生成整数四则运算
def newfra() 生成真分数四则运算
def newtest() 生成制定指定数量的四则运算题目
函数关系:
newint()与newfra()为独立的函数,负责生成随机四则运算,newtest()则随机调用上述两个函数生成题目。详细描述请看下方代码
def newint():
opr = [ '+' , '-' , '×' , '÷' ] fh = random.randint( 0 , 3 ) n1 = random.randint( 1 , 20 ) n2 = random.randint( 1 , 20 ) rjg = 0 if fh = = 0 : rjg = n1 + n2 elif fh = = 1 : n1, n2 = max (n1, n2), min (n1, n2) rjg = n1 - n2 elif fh = = 2 : rjg = 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) rjg = int (n1 / n2) print (n1, opr[fh], n2, '= ' , end = '') return rjg |
真分数四则运算类似。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
def newfra(): opr = [ '+' , '-' , '×' , '÷' ] 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) rjg = 0 if fh = = 0 : rjg = n1 + n2 elif fh = = 1 : n1, n2 = max (n1, n2), min (n1, n2) rjg = n1 - n2 elif fh = = 2 : rjg = n1 * n2 elif fh = = 3 : n1, n2 = max (n1, n2), min (n1, n2) rjg = n1 / n2 print (n1, opr[fh], n2, '= ' , end = '') return rjg |
newtest()函数是要求用户输入一个整数来输出算式的数量,采用while循环随机生成整数或者真分数运算,将答案保存在rjg列表的同时输出算式直到算式数量达到要求。最后输出rjg列表即输出答案。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
def newtest(): opr = [ '+' , '-' , '×' , '÷' ] print ( '输入题库所需要的题目数量' ) n = int ( input ()) rjg = [] m = 0 while m< = (n - 1 ): fh = random.randint( 0 , 4 ) if fh = = 0 : print (m + 1 ,end = '、' ) rjg.append(newfra()) print ( ' ' ) else : print (m + 1 ,end = '、' ) rjg.append(newint()) print ( ' ' ) m = m + 1 m = 0 print ( '答案:' ) while m< = (n - 1 ): print (m + 1 , '、' ,rjg[m]) m = m + 1 |
下列为主函数,第一个模式负责调用上述newint()、new函数,并获得函数返回值即算式答案,与用户输入值进行比较。第二个模式则是生成算式题目。
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
|
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 : rjg = newfra() jg = input () if jg = = '0000' : break ; sr = Fraction(jg) if sr = = rjg: print ( 'right' ) else : print ( 'error. the Tight answer is' , rjg) else : rjg = newint() jg = input () if jg = = '0000' : break ; sr = int (jg) if sr = = rjg: print ( 'right' ) else : print ( 'error. the Tight answer is' , rjg) if n = = 2 : newtest() |
测试运行:
先测试运行第一个模式,如下图:
第二个模式,先输出20个算式数量:
输出1000个算式数量,运行完成且无报错,部分截图如下:
效能分析:
由于本人没有做过效能分析,在编写代码的时候尚未学习该功能,所以在修改程序的过程中没有相关记录。在改进完程序之后再进行学习效能分析才发现步骤错了,最终只能对改进后的程序直接进行分析,请谅解。本次分析采用软件pycharm内置的工具Profile,由于该工具是只对程序运行一次再输出这次运行的效能分析表格(具体功能尚未弄懂),所以根据本人程序,对newtest()函数输入10000的整数来输出10000个算式数量,结果如图(效能分析表格界面由Name、Call Count、Time(ms)、Own Time(ms) 4列组成。表头Name显示被调用的模块或者函数;Call Count显示被调用的次数;Time(ms)显示运行时间和时间百分比,时间单位为毫秒):
PSP表格:
预计耗时(分钟) | 是实际耗时(分钟) | ||
Planning | 计划 | 10 | 10 |
Estimate | 估计这个任务需要多少时间 | / | / |
Development | 开发 | 120 | 240 |
Analysis | 需求分析 | 5 | 10 |
Design Spec | 生成设计文档 | / | / |
Design Review | 设计复审(和同事审核设计文档) | / | / |
Coding Standerd | 代码规范(为目前的开发制定合适的规范) | / | / |
Design | 具体设计 | 5 | 10 |
Coding | 具体编码 | 30 | 60 |
Code Review | 代码复审 | 5 | 10 |
Text | 测试(自测,修改代码,提交修改) | 10 | 30 |
Reporting | 报告 | 10 | 20 |
Text Report | 测试报告 | 10 | 20 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 5 | 5 |
Sum | 合计 | 215 | 420 |
来源:https://www.cnblogs.com/cq1325/p/10566715.html