四则运算 (升级版)

代码地址:https://github.com/kriswang10/calculate2/blob/master/calculate2.py

    上次做的四则运算写的比较直接,凭着感觉写完,再次编写时感觉可升级的部分不多,索性给代码添加上了必要的注释,可以让

其他人在查阅时可以轻松地明白代码意义,也方便自己日后再次进行编写或改进,为了能使题目变得更简单易做,我也将分数运算部

分的比例增大,小学生们会做更少的分数题,减轻难度的同时也将代码运算效率提高的一点。

以下为源代码

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

from fractions import Fraction

import random
import cProfile
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) #避免出现负数,将n1设为更大值
result=n1-n2
elif fh == 2:
result=n1*n2
elif fh == 3:
n1,n2=max(n1,n2),min(n1,n2) #避免除数为分数,将n1设为更大值
while n1%n2 !=0: #避免除数为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) #由t2开始产生随机数,确保t1比t2小,得到分数,下同
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) #避免出现负数,将n1设为更大值
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,5)
if fh ==0: #随机数由0到5,计算分数和整数出现的比例1:5
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 = 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,5)
if fh == 0: #随机数由0到5,计算分数和整数出现的比例1:5
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道题目时也迅速给出了结果,改进后相比上次的结果快了0.几秒,在范围更大的情况下时间缩短的会更多

PSP:

 

    预计耗时(分钟) 是实际耗时(分钟)
Planning 计划 20 20
Estimate 估计这个任务需要多少时间 / /
Development 开发 180 240
Analysis 需求分析 5 10
Design Spec 生成设计文档 / /
Design Review 设计复审(和同事审核设计文档) / /
Coding Standerd 代码规范(为目前的开发制定合适的规范) / /
Design 具体设计 5 10
Coding 具体编码 30 60
Code Review 代码复审 5 10
Text 测试(自测,修改代码,提交修改) 10 20
Reporting 报告 10 20
Text Report 测试报告 30 20
Size Measurement 计算工作量 5 5
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 5
Sum 合计 305 420
     

posted @ 2019-03-28 20:22  飘散的烟  阅读(165)  评论(0)    收藏  举报