Python实现自动生成四则运算题目
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<k:
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() return f1,f2
5,代码运行结果:

6,总结
python时间隔的太久了,而且一开始理解错误以为可以用java,导致很多时间被浪费了,python这次的作业也让我清楚的了解到自己的一些薄弱点,许多函数的使用任然不太熟,这一次任然有一个地方没有处理好,导致真分数的运算海不可以使用(电脑提示迭代次数过高),下一次我会做的更好的
浙公网安备 33010602011771号