python四则运算
(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)显示运行时间和时间百分比,时间单位为毫秒):
预计耗时(分钟) | 是实际耗时(分钟) | ||
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 |