个人项目改进

Github项目地址:https://github.com/hfruhf/software1/blob/master/Promote

要求阐述

  在上一次作业的基础上进行一次升级,如下,至少选择一个升级方向:

  • 功能升级
  • 性能升级
  • 界面升级
  • 使用不同语言升级

PSP

 

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

· Planning

· 计划

 10  8

· Estimate

· 估计这个任务需要多少时间

 10  8

· Development

· 开发

 250  260

· Analysis

· 需求分析 (包括学习新技术)

 25  30

· Design Spec

· 生成设计文档

 20  25

· Design Review

· 设计复审 (和同事审核设计文档)

 20  15

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 5  5

· Design

· 具体设计

 40 50 

· Coding

· 具体编码

 70  80

· Code Review

· 代码复审

 40  35

· Test

· 测试(自我测试,修改代码,提交修改)

 40  45

· Reporting

· 报告

 70  80

· Test Report

· 测试报告+博客

 35  35

· Size Measurement

· 计算工作量

 15  15

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 30  25

合计

   680 716 

改进:针对不同年级设置不同难度的题目(功能优化)

具体改进步骤:

        1、设置函数来进行数字的生成以及另外设置一个函数来进行符号的随机生成

        2、针对整数生成具体的式子

        3、针对分数生成具体的分数四则运算

        4、判断结果对错,输出提示

要求:

        1、针对不同年级设置不同难度的题目

        2、划分难度,根据数字的数量以及符号数量来依次划分等级

        3、通过用户输入答案与准确答案对比,判断结果是否正确并且给出答题准确率

产生随机数字模块:

def createDigitals(num):  # 产生随机数字
    numList = []  # 产生随机数字列表
    for i in range(num):
        number = random.randint(0, 100)  # 产生随机数
        numList.append(number)
    return numList

产生随机符号模块且针对不同年级设置符号数量限制:

def createSymbols(grade, symbolNum):  # 产生随机符号
    # symbol = random.choice(['+', '-', '*', '/'])  # 生成随机符号
    symbol = ['+', '-', '*', '/']
    symbolList = []  # 产生随机符号列表
    if grade == 1 or grade == 2:
        for i in range(0, symbolNum):
            index = random.randint(0, 1)
            symbolList.append(symbol[index])

    else:
        for i in range(0, symbolNum):
            index = random.randint(0, 3)
            symbolList.append(symbol[index])
    return symbolList

设置式子且判断结果是否有误:

def createProblems(num, Type, grade, diff):
    trueAcc = 0
    for i in range(0, int(num)):  # 生成num个数量式子
        if Type == '1':
            problem = createSimpleProblems(grade, diff)
            trueSum = int(eval(str(problem)))
            print("题目:" + problem + "=")
            print('正确的答案为:', trueSum)
            print("请输入本题的答案:")
            inputSum = int(eval(input()))
            if inputSum == trueSum:  # 判断对错
                trueAcc += 1
                print("答案正确!")
            else:
                print("答案错误!")
                print('正确的答案为:', trueSum)
        else:
            tempNum = createProperFractionPro(num, diff)
            trueAcc = trueAcc + tempNum
    accuracyRate = trueAcc / float(num)  # 计算刷题准确率
    print("您本次刷题准确率达到{}%".format(accuracyRate * 100))

完整代码:

import random  # 随机模块
from fractions import Fraction  # 真分数


def createDigitals(num):  # 产生随机数字
    numList = []  # 产生随机数字列表
    for i in range(num):
        number = random.randint(0, 100)  # 产生随机数
        numList.append(number)
    return numList


def createSymbols(grade, symbolNum):  # 产生随机符号
    # symbol = random.choice(['+', '-', '*', '/'])  # 生成随机符号
    symbol = ['+', '-', '*', '/']
    symbolList = []  # 产生随机符号列表
    if grade == 1 or grade == 2:
        for i in range(0, symbolNum):
            index = random.randint(0, 1)
            symbolList.append(symbol[index])

    else:
        for i in range(0, symbolNum):
            index = random.randint(0, 3)
            symbolList.append(symbol[index])
    return symbolList


def createSimpleProblems(grade, diff):
    if diff == '1':
        length = random.randint(2, 3)
    elif diff == '2':
        length = random.randint(4, 5)
    elif diff == '3':
        length = random.randint(6, 7)
    elif diff == '4':
        length = random.randint(8, 9)
    elif diff == '5':
        length = random.randint(9, 10)
    else:
        length = random.randint(2, 4)
    numbers = createDigitals(length)
    symbol = createSymbols(grade, length - 1)
    problem = ''
    for i in range(0, len(symbol)):
        problem += str(numbers[i]) + '' + symbol[i] + ''
    problem += str(numbers[i + 1])
    if eval(problem) < 0:
        createSimpleProblems(grade, diff)
    else:
        return problem


def createProperFractionPro(num, degree):
    symbol = ['+', '-']
    if degree == '1':
        degree = random.randint(1, 2)  # 难度系数为1
    elif degree == '2':
        degree = random.randint(3, 4)  # 难度系数为2
    elif degree == '3':
        degree = random.randint(5, 6)  # 难度系数为3
    elif degree == '4':
        degree = random.randint(7, 8)  # 难度系数为4
    elif degree == '5':
        degree = random.randint(9, 10)  # 难度系数为5
    else:
        degree = random.randint(1, 3)  # 默认难度系数
    problem = ''
    trueNum = 0
    for i in range(degree):
        numerator = random.randint(1, 10)  # 随机生成分子
        denominator = random.randint(numerator, 10)  # 真分数要求分子小于分母
        symbolT = symbol[random.randint(0, 1)]  # 只要求+ -
        problem += str(numerator) + '/' + str(denominator) + symbolT  # 拼接成一个问题
    numerator = random.randint(1, 10)  # 最后一个分数
    denominator = random.randint(numerator, 10)
    problem += str(numerator) + '/' + str(denominator)
    Sum = eval(problem)
    Sum = Fraction('{}'.format(Sum)).limit_denominator()
    if Sum > 0:
        print("题目:" + problem, "=")
        print('正确的答案为:', Sum)
        print("请输入本题的答案:")
        inputSum = Fraction('{}'.format(eval(input()))).limit_denominator()  # 获取用户输入的答案
        if Sum == inputSum:
            trueNum = 1
            print("答案正确!")
        else:
            trueNum = 0
            print("答案错误!")
            print('正确的答案为:', Sum)
    else:  # 如果结果是负数,则重新生成
        createProperFractionPro(num, degree)
    return trueNum


# In[45]:


# createProblems——生成num个数量的式子,并判断结果
def createProblems(num, Type, grade, diff):
    trueAcc = 0
    for i in range(0, int(num)):  # 生成num个数量式子
        if Type == '1':
            problem = createSimpleProblems(grade, diff)
            trueSum = int(eval(str(problem)))
            print("题目:" + problem + "=")
            print('正确的答案为:', trueSum)
            print("请输入本题的答案:")
            inputSum = int(eval(input()))
            if inputSum == trueSum:  # 判断对错
                trueAcc += 1
                print("答案正确!")
            else:
                print("答案错误!")
                print('正确的答案为:', trueSum)
        else:
            tempNum = createProperFractionPro(num, diff)
            trueAcc = trueAcc + tempNum
    accuracyRate = trueAcc / float(num)  # 计算刷题准确率
    print("您本次刷题准确率达到{}%".format(accuracyRate * 100))


def main():
    print("请输入年级:")
    grade = input()
    print("请输入题目题型:1,0->(整数四则运算,分数四则运算)")
    Type = input()
    print("请输入题型难度:(1,2,3,4,5)")
    diff = input()
    print("请输入题目数量:")
    num = input()
    createProblems(num, Type, grade, diff)


if __name__ == '__main__':
    main()

结果显示:

 

 性能分析:

 

 

 

 总结与收获:改进之后的程序很大一部分在main()函数里面且大部分是由于输入而消耗时间较多,这个算法的性能还需要提升。

 

posted @ 2020-09-28 10:30  简笺  阅读(144)  评论(0编辑  收藏  举报