源代码管理平台Gitbee地址:https://gitee.com/chen-haijin/
1.题目要求:能自动生成小学四则运算题目,且每一道题目的运算结果不能为负。除了支持整数运算外,还要支持真分数四则运算。
2.工具清单:
1)编程语言:python
2) 效能分析工具:profile
3)源代码管理平台:Gitbee
3.PSP表格
预计耗时(分钟) | 实际耗时(分钟) | ||
Planning | 计划 | 20 | 20 |
Estimate | 估计这个任务需要多少时间 | 5 | 5 |
Development | 开发 | 80 | 90 |
Analysis | 需求分析 | 10 | 10 |
Design Spec | 生成设计文档 | / | / |
Design Review | 设计复审(和同事审核设计文档) | / | / |
Coding Standerd | 代码规范(为目前的开发制定合适的规范) | / | / |
Design | 具体设计 | 30 | 30 |
Coding | 具体编码 | 100 | 100 |
Code Review | 代码复审 | 10 | 15 |
Text | 测试(自测,修改代码,提交修改) | 20 | 20 |
Reporting | 报告 | 20 | 20 |
Text Report | 测试报告 | 10 | 10 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 5 | 5 |
Sum | 合计 | 305 | 330 |
4.功能升级
原来自动生成四则运算题目的设计过于简单(上一条博客),生成的题目四则运算只是两个整数的运算,没有出现分数和小数的运算。为此我在功能上进行了升级。升级后的功能分为:1)两个整数之间加减运算 2)带有两位小数的两个数之间加减运算 3)两个分数之间加减运算 4)两个整数之间乘除法运算 5)两个分数之间的加减运算。
另外我还增加了一个用户可以自己选择题目等级的选择,题目等级分为:
1)初级 :参与四则运算的两个数的取值范围位0~20
2)中级 : 参与四则运算的两个数的取值范围位0~50
3)高级: 参与四则运算的两个数的取值范围位0~300
5.代码说明
1)主干函数
import random from fractions import Fraction #主干函数 def useAnsult(): print("\033[1;31m此软件能计算的类型有:1)两个整数之间加减运算 2)带有两位小数的两个数之间加减运算 3)两个分数之间加减运算\033[0m") print("\033[1;31m 4)两个整数之间乘除法运算 5)两个分数之间的加减运算\033[0m") homeworkType=int(input("请输入要生成的题目类型代号(1,2,3,4,5,6)中的其中一个:")) homeworkCount=int(input("请输入要生成的题目个数:")) level=input("\033[1;35m请输入你想计算的四则题目的等级(初级,中级,或高级):") if level=="初级": level=20 elif level=="中级": level=50 else: level=300 count=0 while count< homeworkCount: if homeworkType==1: count=count+1 print("第"+str(count)+"道题目") intAddSub(level) elif homeworkType==2: count=count+1 print("第"+str(count)+"道题目") decAddSub(level) elif homeworkType==3: count=count+1 print("第"+str(count)+"道题目") proFraAddSub(level) elif homeworkType==4: count=count+1 print("第"+str(count)+"道题目") intMulDiv(level) elif homeworkType==5: count=count+1 print("第"+str(count)+"道题目") proFraMulDiv(level) else: homeworkType=input("\033[1;35m没有该题目类型,输入错误,请重新输入:\033[0m")
2)两个整数之间加减运算函数
#两个整数之间加减运算 def intAddSub(level): typeCh=random.randint(0,1) #选择加减运算符 left=random.randint(0,level) #生成随机整数 right=random.randint(0,level) if typeCh==0: #加法运算 print(str(left)+"+"+str(right)+"= ?") input("请输入你的答案:") print("\033[1;35m正确答案是:\033[0m",str(left+right)) else: #减法运算 if left< right: #确保减法的结果不会出现负数 middleVariable=left left=right right= middleVariable print(str(left)+"-"+str(right)+" = ?") input("请输入你的答案:") print("\033[1;35m正确答案是:\033[0m",str(left-right))
3)带有两位小数的两个数之间加减运算函数
#带有两位小数的两个数之间加减运算 def decAddSub(level): left = random.uniform(0, level) left=round(left, 2) #生成的随机数保留两位小数 right = random.uniform(0, level) right=round(right, 2) typeCh=random.randint(0,1) #选择加减运算符 if typeCh==0: #加法运算 print(str(left)+"+"+str(right)+"= ?") input("请输入你的答案:") print("\033[1;35m正确答案是:{:.2f}\033[0m".format(left+right)) else: #减法运算 if left< right: #确保减法的结果不会出现负数 middleVariable=left left=right right= middleVariable print(str(left)+"-"+str(right)+" = ?") input("请输入你的答案:") print("\033[1;35m正确答案是:{:.2f}\033[0m".format(left-right))
4)两个分数之间的加减运算 函数
#两个分数之间的加减运算 def proFraAddSub(level): number1=random.randint(0,level) number11=random.randint(1,level) left=Fraction(number1,number11 ) number2=random.randint(0,level) number22=random.randint(1,level) right=Fraction(number2,number22) typeCh=random.randint(0,1) #选择加减运算符 if typeCh==0: #加法运算 print(str(left)+"+"+str(right)+"= ?") input("请输入你的答案:") print("\033[1;35m正确答案是:\033[0m",str(Fraction(left+right))) else: #减法运算 if left< right: #确保减法的结果不会出现负数 middleVariable=left left=right right= middleVariable print(str(left)+"-"+str(right)+" = ?") input("请输入你的答案:") print("\033[1;35m正确答案是:\033[0m",str(Fraction(left-right)))
5)两个整数之间乘除运算函数
#两个整数之间乘除运算 def intMulDiv(level): typeCh=random.randint(0,1) #选择运乘除算符 if typeCh==0: #乘法 left=random.randint(0,level) right=random.randint(0,level) print(str(left)+"*"+str(right)+"= ?") input("请输入你的答案:") print("\033[1;35m正确答案是:\033[0m",str(left*right)) else: #除法 if level<300: right=random.randint(1,level) left=right*random.randint(0,4) #此处考虑到用户如果选择初级或中级的除法计算,计算结果是整数比较好,故设除数是被除数的倍数 else: left=random.randint(1,level) right=random.randint(1,level) print(str(left)+"÷"+str(right)+" = ?") input("请输入你的答案:") if left%right==0: #判断是否能整除 print("\033[1;35m正确答案是:\033[0m",str(int(left/right))) else: print("\033[1;35m正确答案是:\033[0m",str(Fraction(left,right)))
6)两个分数之间乘除计算函数
#两个分数之间乘除计算 def proFraMulDiv(level): number1=random.randint(0,level) number11=random.randint(1,level) left=Fraction(number1,number11 ) typeCh=random.randint(0,1) #选择乘除运算符 if typeCh==0: #乘法运算 number2=random.randint(0,level) number22=random.randint(1,level) right=Fraction(number2,number22) print(str(left)+"*"+str(right)+"= ?") input("请输入你的答案:") print("\033[1;35m正确答案是:\033[0m",str(left*right)) else: #除法运算 number2=random.randint(1,level) number22=random.randint(1,level) right=Fraction(number2,number22) print(str(left)+"÷"+str(right)+" = ?") input("请输入你的答案:") print("\033[1;35m正确答案是:\033[0m",str(Fraction(left,right)))
7)运行主干函数
useAnsult()
6.测试运行
7.性能分析