https://github.com/bevis-debug/-/commit/20ddab87b84feea3889b5e683d2eb7ce9a40c66f
PSP2.1
任务内容
计划完成需要的时间(min)
实际完成所需要的时间(min)
Plainning
计划
30
50
Estimate
估计这个任务需要多少时间,并规划大致工作步骤
20
20
Analysis
需求分析 (包括学习新技术)
60
90
Design
具体设计
50
60
Coding
具体编码
400
500
test
测试(自我测试,修改)
200
300
Postmortem&Process improvement Plan
事后总结,并提出过程改进计划
30
40
summary
合计
790
1060
1,题目反思
功能需求:分多种选择来给客户提供不同的服务,有自我简单四则测试,有真分数的较难四则运算测试,用户可输入所需的题目数来进行自我测试,事后会给出分数统计,并在每一次回答后进行判断正确与否,错了就给出正确答案,最后还有个题库给客户观看。
2,程序设计
将几个功能分化为多个函数,简单四则运算用一个函数numericalOperation解决,加减乘除用random函数判断,然后给出结果和判断,题库同理,用两个函数将题目和答案收入,在循环完后全部显示出来;真分数的运算还要加入fraction的使用,以及判断是否构成真分数等等
3,实现代码
from fractions import Fraction
import random
ans=[]
quation=[]
f=0
#四则运算
def numerecalOperation():
sym = ['+', '-', '×', '÷']
f= random.randint(0, 3)
n1 = random.randint(1, 20)
n2 = random.randint(1, 20)
result = 0
if f== 0:#加法
result = n1 + n2
elif f == 1:#减法,要先比较大小,防止输出负数
n1, n2 = max(n1, n2), min(n1, n2)
result = n1 - n2
elif f== 2:#乘法
result = n1 * n2
elif f == 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[f], n2, '= ', end='')
return result
def createF(): #生成分数
fz1 = random.randint(1, 20)
fm1 = random.randint(1,20)
f1 = Fraction(fz1, fm1)
fz2 = random.randint(1, 20)
fm2 = random.randint(20, 20)
f2 = Fraction(fz2, fm2)
return f1, f2
def numOper():##真分数的运算
symbol = random.choice(['+','-','*','÷'])
f1,f2 = createF()
if symbol =='+':
while f1+f2>1:
f1,f2=createF()
quation.append(str(f1)+'+'+str(f2)+'=')
f=f1+f2
ans.append(str(f))
elif symbol =='-':
f1,f2 = max(f1,f2),min(f1,f2) #防止出现负数
quation.append(str(f1)+'-'+str(f2)+'=')
f=f1-f2
ans.append(str(f))
elif symbol == '*':
while f1*f2>1:
f1,f2 = createF()
quation.append(str(f1)+'*'+str(f2)+'=')
f=f1*f2
ans.append(str(f))
else:
while f1/f2>1:
f1,f2=createF()
quation.append(str(f1)+'÷'+str(f2)+'=')
f=f1/f2
ans.append(str(f))
print(quation)
print(ans)
#制作题库
def test():
sym = ['+', '-', '×', '÷']
print('输入所需要的题目数量')
n=int(input())
result =[]
m=0
while m<=(n-1):
print(m+1,end='、')
result .append(numericalOperation())
print(' ')
m=m+1
m=0
print('对应的答案:')
while m<=(n-1):
print(m+1,'、',result [m])
m=m+1
print('选择想要的模式')
print('1、进行四则运算')
print('2、制作题库')
print("3、真分数计算")
n=int(input())
#当输入1时,进行四则运算,调用函数syzs()
if n==1:
print("输入测试的题目数:")
k=int(input())
p=0
q=0
while p
result = numericalOperation()
j= input()
s= int(j)
if s== result :
q=q+1
print('right')
else:
print('error.,the answer is', result )
p=p+1
print("成绩为%f分",100*q/k)
#当输入2时,进行制作题库
if n==2:
test()
if n==3:
numOper()
4,更新升级
多余的代码判断,拖延程序运行时间
def createF():
fz1= random.randint(1, 20)
fm1= random.randint(1, 20)
f1=Fraction(fz1, fm1)
fz2= random.randint(1, 20)
fm2= random.randint(1, 20)
f2=Fraction(fz2, fm2)
f1,f2=createF()returnf1,f2
5,代码运行结果:
6,总结
python时间隔的太久了,而且一开始理解错误以为可以用java,导致很多时间被浪费了,python这次的作业也让我清楚的了解到自己的一些薄弱点,许多函数的使用任然不太熟,这一次任然有一个地方没有处理好,导致真分数的运算海不可以使用(电脑提示迭代次数过高),下一次我会做的更好的