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()

四、测试运行

 

 
posted @ 2021-09-19 22:25  Leeingli  阅读(32)  评论(0编辑  收藏  举报