一、需求分析
1.能自动生成小学四则运算题目并且每一道题目的运算结果不能为负;
2.数字在0-100,运算符2-5个;
3.输入参数n,随机产生n道加减乘除。
二、功能设计
基础功能:四则运算,随机产生n道算式题目;
升级功能:1)带有两位小数的两个数之间加减运算;
2)两个分数之间加减乘除运算;
3)答题结束可以显示用户答错的题目个数和答对的题目个数。
三、详情代码
(1)主函数:程序框架及实现升级功能
import random from fractions import Fraction #主函数 def useAnsult(): print(" 33[1;35m此软件能计算的类型有:1)两个整数之间加减运算 2)带有两位小数的两个数之间加减运算 3)两个分数之间加减运算 4)两个整数之间乘除法运算 5)两个分数之间的乘除运算 33[0m") homeworkType=int(input("请输入要生成的题目类型代号(1,2,3,4,5)中的其中一个:")) homeworkCount=int(input("请输入要生成的题目个数:")) level = 100 count=0 rightnum=0 while count< homeworkCount: if homeworkType==1: count=count+1 print("第"+str(count)+"道题目") rightnum += intAddSub(level) elif homeworkType==2: count=count+1 print("第"+str(count)+"道题目") rightnum = decAddSub(level) elif homeworkType==3: count=count+1 print("第"+str(count)+"道题目") rightnum = proFraAddSub(level) elif homeworkType==4: count=count+1 print("第"+str(count)+"道题目") rightnum = intMulDiv(level) elif homeworkType==5: count=count+1 print("第"+str(count)+"道题目") rightnum = proFraMulDiv(level) else: homeworkType=input(" 33[1;35m没有该题目类型,输入错误,请重新输入: 33[0m") #显示用户答错的题目个数和答对的题目个数 print(" 33[1;31m你总共答了{0}题,其中答对了{1}题,准确率为{2} 33[0m".format(homeworkCount,rightnum,rightnum/homeworkCount))
(2)五种题目类型
a. 两个整数之间加减乘除运算函数
#两个整数之间加减运算 def intAddSub(level): typeCh=random.randint(0,1) #选择加减运算符 left=random.randint(0,level) #生成随机整数 right=random.randint(0,level) rightnum = 0 wrongnum = 0 if typeCh==0: #加法运算 print(str(left)+"+"+str(right)+"= ?") answer = int(input("请输入你的答案:")) if (answer==(left+right)): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(left+right)) wrongnum=wrongnum+1 else: #减法运算 if left< right: #确保减法的结果不会出现负数 middleVariable=left left=right right= middleVariable print(str(left)+"-"+str(right)+" = ?") answer = int(input("请输入你的答案:")) if (answer==(left-right)): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(left-right)) wrongnum=wrongnum+1 return rightnum #两个整数之间乘除运算 def intMulDiv(level): rightnum = 0 wrongnum = 0 typeCh=random.randint(0,1) #选择运乘除算符 if typeCh==0: #乘法 left=random.randint(0,level) right=random.randint(0,level) print(str(left)+"*"+str(right)+"= ?") answer = int(input("请输入你的答案:")) if (answer==(left*right)): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(left*right)) wrongnum=wrongnum+1 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)+" = ?") answer = int(input("请输入你的答案:")) if left%right==0: #判断是否能整除 if (answer==int(left/right)): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(int(left/right))) wrongnum=wrongnum+1 else: if (answer==Fraction(left,right)): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(Fraction(left,right))) wrongnum=wrongnum+1 return rightnum
b. 带有两位小数的两个数之间加减运算函数
#带有两位小数的两个数之间加减运算 def decAddSub(level): left = random.uniform(0, level) left=round(left, 2) #生成的随机数保留两位小数 right = random.uniform(0, level) right=round(right, 2) rightnum = 0 wrongnum = 0 typeCh=random.randint(0,1) #选择加减运算符 if typeCh==0: #加法运算 print(str(left)+"+"+str(right)+"= ?") answer = int(input("请输入你的答案:")) if (answer==(left+right)): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(left+right)) wrongnum=wrongnum+1 else: #减法运算 if left< right: #确保减法的结果不会出现负数 middleVariable=left left=right right= middleVariable print(str(left)+"-"+str(right)+" = ?") answer = int(input("请输入你的答案:")) if (answer==(left-right)): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(left-right)) wrongnum=wrongnum+1 return rightnum
c. 两个分数之间加减乘除运算函数
#两个分数之间的加减运算 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) rightnum = 0 wrongnum = 0 typeCh=random.randint(0,1) #选择加减运算符 if typeCh==0: #加法运算 print(str(left)+"+"+str(right)+"= ?") answer = input("请输入你的答案:") if (answer==str(Fraction(left+right))): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(Fraction(left+right))) wrongnum=wrongnum+1 else: #减法运算 if left< right: #确保减法的结果不会出现负数 middleVariable=left left=right right= middleVariable print(str(left)+"-"+str(right)+" = ?") answer = input("请输入你的答案:") if (answer==str(Fraction(left-right))): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(Fraction(left-right))) wrongnum=wrongnum+1 return rightnum #两个分数之间乘除计算 def proFraMulDiv(level): number1=random.randint(0,level) number11=random.randint(1,level) left=Fraction(number1,number11 ) rightnum = 0 wrongnum = 0 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)+"= ?") answer = input("请输入你的答案:") if (answer==str(left*right)): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(left*right)) wrongnum=wrongnum+1 else: #除法运算 number2=random.randint(1,level) number22=random.randint(1,level) right=Fraction(number2,number22) print(str(left)+"÷"+str(right)+" = ?") answer = input("请输入你的答案:") if (answer==str(Fraction(left,right))): print(" 33[1;31m【回答正确!】 33[0m") rightnum=rightnum+1 else: print(" 33[1;31m【回答错误!正确答案是:%s】 33[0m" % str(Fraction(left,right))) wrongnum=wrongnum+1 return rightnum
(3)运行主函数
#运行主干函数 useAnsult()
四、测试运行