zoukankan      html  css  js  c++  java
  • PSP四则运算升级作业

    一、需求分析

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

    四、测试运行

     

     
  • 相关阅读:
    配置sonar、jenkins进行持续审查
    maven命令解释
    Maven中-DskipTests和-Dmaven.test.skip=true的区别
    maven之一:maven安装和eclipse集成
    Eclipse安装Maven插件
    IntelliJ IDEA单元测试和代码覆盖率图解
    关于Spring中的<context:annotation-config/>配置
    Java开发之@PostConstruct和@PreConstruct注解
    Java定时任务的三种实现方法
    JAVA之Mybatis基础入门二 -- 新增、更新、删除
  • 原文地址:https://www.cnblogs.com/leeing/p/15312993.html
Copyright © 2011-2022 走看看