zoukankan      html  css  js  c++  java
  • 个人PSP(四则运算)升级

    源代码管理平台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("33[1;31m此软件能计算的类型有:1)两个整数之间加减运算  2)带有两位小数的两个数之间加减运算 3)两个分数之间加减运算33[0m")
        print("33[1;31m 4)两个整数之间乘除法运算  5)两个分数之间的加减运算33[0m")
        homeworkType=int(input("请输入要生成的题目类型代号(1,2,3,4,5,6)中的其中一个:"))
        homeworkCount=int(input("请输入要生成的题目个数:"))
        level=input("33[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("33[1;35m没有该题目类型,输入错误,请重新输入:33[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("33[1;35m正确答案是:33[0m",str(left+right))
        else:                           #减法运算
            if left< right:             #确保减法的结果不会出现负数
                middleVariable=left
                left=right
                right= middleVariable
            print(str(left)+"-"+str(right)+" = ?")
            input("请输入你的答案:")
            print("33[1;35m正确答案是:33[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("33[1;35m正确答案是:{:.2f}33[0m".format(left+right))
         else:                            #减法运算
            if left< right:               #确保减法的结果不会出现负数
                middleVariable=left
                left=right
                right= middleVariable
            print(str(left)+"-"+str(right)+" = ?")
            input("请输入你的答案:")
            print("33[1;35m正确答案是:{:.2f}33[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("33[1;35m正确答案是:33[0m",str(Fraction(left+right)))
        else:                         #减法运算 
            if left< right:           #确保减法的结果不会出现负数
                middleVariable=left
                left=right
                right= middleVariable
            print(str(left)+"-"+str(right)+" = ?")
            input("请输入你的答案:")
            print("33[1;35m正确答案是:33[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("33[1;35m正确答案是:33[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("33[1;35m正确答案是:33[0m",str(int(left/right)))
            else:
                print("33[1;35m正确答案是:33[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("33[1;35m正确答案是:33[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("33[1;35m正确答案是:33[0m",str(Fraction(left,right)))

    7)运行主干函数

    useAnsult()

     6.测试运行

     

      7.性能分析

  • 相关阅读:
    python等缩进语言的词法分析实现
    收集Android程序测试代码覆盖率
    对语言之争的看法
    关于asmlinkage
    洛谷 P4171 [JSOI2010] 满汉全席(2sat)
    Codeforces Round #748 (Div. 3)解题报告
    洛谷 P1712 [NOI2016] 区间(尺取法、线段树)
    洛谷 P4782 【模板】2SAT 问题
    洛谷 P3513 [POI2011]KONConspiracy(2sat方案数)
    梦见和深爱的女孩牵着手,竟然从梦中幸福惊醒,醒后一片悲伤~~
  • 原文地址:https://www.cnblogs.com/2987831760qq-com/p/13737185.html
Copyright © 2011-2022 走看看