自动生成小学四则运算题目
1)Github项目地址
https://github.com/zheng-xiao-yi/2/blob/master/xxsxtm.py
2)估计将在程序的各个模块的开发上耗费的时间。
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 25 | 20 |
| · Estimate | · 估计这个任务需要多少时间 | 320 | 300 |
| Development | 开发 | / | / |
| · Analysis | · 需求分析 (包括学习新技术) | 25 | 10 |
| · Design Spec | · 生成设计文档 | 20 | |
| · Design Review | · 设计复审 (和同事审核设计文档) | / | / |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 15 |
| · Design | · 具体设计 | 30 | 20 |
| · Coding | · 具体编码 | 100 | 110 |
| · Code Review | · 代码复审 | 30 | 20 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 40 | 40 |
| Reporting | 报告 | 15 | 15 |
| · Test Report | · 测试报告 | 10 | 10 |
| · Size Measurement | · 计算工作量 | 10 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
| 合计 | 345 | 320 |
3)解题思路描述
①固定题目长度解决输入的要求(整数和真分数)
②生成随机数
③写生成题目和计算的函数,计算结果为小数
④不固定题目长度
⑤去掉结果为负数的题目
⑥找函数使结果成分数
⑦分成两个年龄段,三年级以上有乘除法,三年级以下没有
4)设计实现过程
一共三个函数,分别为main(),jisuan(),timu()
流程为:main()中输入是几年级的考生,然后进入timu()生成一个题目,然后进入jisuan()中得出结果,最后在main()中先判断结果是否不为负数,如果是则到了输入结果,判断结果,如果不是,则从新回到timu()和jisuan()中
流程图为:

5)代码说明(主要函数)
def timu(nianji,n): #生成题目
shuzi=[random.randint(1,100)for i in range(n)]
ti=""
if(nianji<=3): #三年级以下只用做加减法
fuhao=[random.choice(['+','-'])for i in range(n-1)]
else:
fuhao=[random.choice(['+','-','*','/'])for i in range(n-1)]
for i in range(n-1):
if(fuhao[i]=='/'):
while(shuzi[i]>=shuzi[i+1]):
shuzi[i]=random.randint(1,shuzi[i+1])
for i in range(n-1):
ti=ti+str(shuzi[i])+fuhao[i]
ti=ti+str(shuzi[i+1])+" ="
return shuzi,fuhao,ti
def jisuan(shuzi,fuhao,n): #题目计算
i=0
while (i<n-1):
if(fuhao[i]=='*' or fuhao[i]=='/'):
j=i
temp=shuzi[i]
while(j<n-1 and (fuhao[j]=='*' or fuhao[i]=='/')):
if(fuhao[j]=='*'):
temp=temp*shuzi[j+1]
elif(fuhao[i]=='/'):
temp=temp/shuzi[j+1]
j=j+1
shuzi[i]=temp;
i=j
i=i+1
daan=shuzi[0]
for i in range(n-1):
if(fuhao[i]=='+'):
daan=daan+shuzi[i+1]
elif(fuhao[i]=='-'):
daan=daan-shuzi[i+1]
return daan
6)测试运行




7)展示程序中消耗最大的函数


浙公网安备 33010602011771号