PSP四则运算升级作业
一、需求分析
1.能自动生成小学四则运算题目并且每一道题目的运算结果不能为负;
2.数字在0-100,运算符2-5个;
3.输入参数n,随机产生n道加减乘除。
二、功能设计
基础功能:四则运算,随机产生n道算式题目;
升级功能:1)带有两位小数的两个数之间加减运算;
2)两个分数之间加减乘除运算;
3)答题结束可以显示用户答错的题目个数和答对的题目个数。
三、详情代码
(1)主函数:程序框架及实现升级功能
import random
from fractions import Fraction
#主函数
def useAnsult():
print("\033[1;35m此软件能计算的类型有:1)两个整数之间加减运算 2)带有两位小数的两个数之间加减运算 3)两个分数之间加减运算 4)两个整数之间乘除法运算 5)两个分数之间的乘除运算\033[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("\033[1;35m没有该题目类型,输入错误,请重新输入:\033[0m")
#显示用户答错的题目个数和答对的题目个数
print("\033[1;31m你总共答了{0}题,其中答对了{1}题,准确率为{2}\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[0m" % str(int(left/right)))
wrongnum=wrongnum+1
else:
if (answer==Fraction(left,right)):
print("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[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("\033[1;31m【回答正确!】\033[0m")
rightnum=rightnum+1
else:
print("\033[1;31m【回答错误!正确答案是:%s】\033[0m" % str(Fraction(left,right)))
wrongnum=wrongnum+1
return rightnum
(3)运行主函数
#运行主干函数 useAnsult()
四、测试运行


浙公网安备 33010602011771号