软件工程第二次作业(岳智彬 学号:D23182407 周凡喻 学号:M23385403)

        项目地址

  代码 - 四则运算(结对项目) - 海军工程大学-何智勇 (gitee.com)

        PSP展示

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 20

50

· Estimate

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

 960

1540

Development

开发

 600

1000

· Analysis

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

 120

100

· Design Spec

· 生成设计文档

 60

60

· Design Review

· 设计复审

 60

60

· Coding Standard

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

 60

60

· Design

· 具体设计

 90

180

· Coding

· 具体编码

 90

180

· Code Review

· 代码复审

 60

180

· Test

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

 60

180

Reporting

报告

 360

540

· Test Repor

· 测试报告

 180

360

· Size Measurement

· 计算工作量

 60

60

· Postmortem & Process Improvement Plan

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

 120

120

合计

 980

1560

        学习日志

2023.10.16学习日志

        学习时间:09:50——11:55

                          19:00——23:00

        学习内容:1.根据任务需求,设计代码框架

                          2.确定分工任务

                          3.在网上收集与本次任务相关的资料

        收获体会:首先进行了本次项目的初步讨论,对于此次任务目标有了大致的了解,明确了每个人的分工任务,搜集了本次任务可能用的到的资料

        自我效率评价:由于只是初步的计划,本次任务完成的比较顺利,唯一比较花时间的就是设计代码框架部分,因为需要搜集很多相关的资料,不过对于整体效率还是比较高。

2023.10.18学习日志

        学习时间:09:50——11:55

                          19:00——23:00

        学习内容:1.根据时间设置种子值来保证每次随机产生的数值不同,保证每道题不同

                          2.如何对txt文件进行存储

                          3.使用eval函数来进行数值判断

        收获体会:通过上述三个功能的学习以及之前所学习的知识,基本完成了自动出题软件的设计,同时,我也学习到了有关于time、random库里相关函数的使用方法。

        自我效率评价:在这段时间内,我们完成了大部分的任务,但仍有少部分是另寻时间学习的,因此,在效率方面还需要有所提升。

2023.10.19学习日志

        学习时间:09:50——11:55

                          19:00——23:00

        学习内容:1.python的单元测试内容

                          2.对程序的性能分析

        收获体会:通过上述两个个功能的学习以及之前所学习的知识,完成了对前一天所设计的程序的测试,同时,我也学习到了有关于python单元测试、性能分析工具的使用方法。

        自我效率评价:在这段时间内,我们完成了所有的任务,相比于前一天的学习,在效率方面有所提升。

        解题思路

        分别对每个需求进行分析,思考其每个功能如何实现,并通过在互联网搜索相关算法,参考别人如何实现该类功能。对于实现数量自定义的解题思路为:定义一个变量,先采用input函数读取用户的输入,再采用for循环,将该变量设置为上限即可;对于加减乘除运算,就只需要采用基本的四则运算即可;对于答案验证功能采用eval函数判断即可;对于保证每次出题不一样,采用随机数生成数值即可;对于存储每次的运算记录,生成了data.txt文件用于每次的记录存储。在搜集资料的过程,主要就是针对上述所有用到的功能,搜索相关函数的使用方法。

        实现过程

        本次程序设计共有两个函数,分别为主函数和calculate函数,首先在主函数中对用户的输入进行采取,再调用calculate函数对数据进行处理,即calculate函数从属于主函数。

        本次项目的分工如下:

        岳智彬负责:完善read me、加减乘除四则运算、每个运算包含两个运算符、历史记录的存储和查看、测试用例1-10包括题目数量是否正确、单个数目的最大值是否符合、检查运算符是否正确、检查题目是否符合四则运算规则。

        周凡喻负责:题目数量可以自定义、运算数在一百之内、答题功能的并验证答案是否正确、题目避免重复、语句的注释、判分同时输出正确率,正确道数、攥写文章。

分工提交截图

pycharm记录截图

测试出题数量的单元测试截图

import random
import time
import datetime

random.seed(time.perf_counter())


def calculator(n, maximum):
    """随机产生n道正整数四则运算的题目,用户输入计算结果,
    判断输入正确与否,并统计正确率。题目保证减法不出现负数."""
    point = 100/n
    ope1 = str(input('请输入第一个运算符号:'))
    ope2 = str(input('请输入第二个运算符号:'))
    correct = 0
    count = 0
    max_final = 0
    for i in range(n):  # 循环n次,每次产生一个新问题
        b = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        a = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        c = random.randint(0, maximum)  # 随机产生一个随机数,使其具有两个运算符
        max1 = max(a,b,c)
        if max1 > max_final:
            max_final = max1
        #################Begin##############################
        print(f'{a}{ope1}{b}{ope2}{c}=', end='')
        result = float(input())
        count = count + 1
        if result == eval(f"{a}{ope1}{b}{ope2}{c}"):
            correct = correct + 1
            print("恭喜你,回答正确")
    n = count

            #################End##############################
    print("答对{}题,正确率为{}%,总分为{}".format(correct, correct / n * 100, correct * point))
    with open("date.txt", "a") as fp:
        now = datetime.datetime.now()
        fp.write(str(now))
        fp.write("   ")
        fp.write('题目数')
        fp.write("   ")
        fp.write(str(n))
        fp.write("   ")
        fp.write('正确题目数')
        fp.write("   ")
        fp.write(str(correct))
        fp.write("   ")
        fp.write('正确率')
        fp.write("   ")
        fp.write(str(correct / n * 100))
        fp.write("   ")
        fp.write('分数')
        fp.write("   ")
        fp.write(str(correct * point))
        fp.write("\n")
    return n


if __name__ == '__main__':
    num = int(input('请输入出题数量:'))
    m = int(input('请输入参与计算的最大数字:'))
    calculator(num, m)

测试最大值的单元测试截图

import random
import time
import datetime

random.seed(time.perf_counter())


def calculator(n, maximum):
    """随机产生n道正整数四则运算的题目,用户输入计算结果,
    判断输入正确与否,并统计正确率。题目保证减法不出现负数."""
    point = 100/n
    ope1 = str(input('请输入第一个运算符号:'))
    ope2 = str(input('请输入第二个运算符号:'))
    correct = 0
    count = 0
    max_final = 0
    for i in range(n):  # 循环n次,每次产生一个新问题
        b = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        a = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        c = random.randint(0, maximum)  # 随机产生一个随机数,使其具有两个运算符
        max1 = max(a,b,c)
        if max1 > max_final:
            max_final = max1
        #################Begin##############################
        print(f'{a}{ope1}{b}{ope2}{c}=', end='')
        result = float(input())
        count = count + 1
        if result == eval(f"{a}{ope1}{b}{ope2}{c}"):
            correct = correct + 1
            print("恭喜你,回答正确")
    n = count


            #################End##############################
    print("答对{}题,正确率为{}%,总分为{}".format(correct, correct / n * 100, correct * point))
    with open("date.txt", "a") as fp:
        now = datetime.datetime.now()
        fp.write(str(now))
        fp.write("   ")
        fp.write('题目数')
        fp.write("   ")
        fp.write(str(n))
        fp.write("   ")
        fp.write('正确题目数')
        fp.write("   ")
        fp.write(str(correct))
        fp.write("   ")
        fp.write('正确率')
        fp.write("   ")
        fp.write(str(correct / n * 100))
        fp.write("   ")
        fp.write('分数')
        fp.write("   ")
        fp.write(str(correct * point))
        fp.write("\n")
    return max_final


if __name__ == '__main__':
    num = int(input('请输入出题数量:'))
    m = int(input('请输入参与计算的最大数字:'))
    calculator(num, m)

测试运算符是否正确单元测试

import random
import time
import datetime

random.seed(time.perf_counter())


def calculator(n, maximum):
    """随机产生n道正整数四则运算的题目,用户输入计算结果,
    判断输入正确与否,并统计正确率。题目保证减法不出现负数."""
    point = 100/n
    ope1 = str(input('请输入第一个运算符号:'))
    ope2 = str(input('请输入第二个运算符号:'))
    ope3 = ope1
    ope4 = ope2
    correct = 0
    count = 0
    max_final = 0
    for i in range(n):  # 循环n次,每次产生一个新问题
        b = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        a = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        c = random.randint(0, maximum)  # 随机产生一个随机数,使其具有两个运算符
        max1 = max(a,b,c)
        if max1 > max_final:
            max_final = max1
        #################Begin##############################
        print(f'{a}{ope1}{b}{ope2}{c}=', end='')
        result = float(input())
        count = count + 1
        if result == eval(f"{a}{ope1}{b}{ope2}{c}"):
            correct = correct + 1
            print("恭喜你,回答正确")
        if eval(f"{a}{ope3}{b}{ope4}{c}") == eval(f"{a}{ope1}{b}{ope2}{c}"):
            return True
        else:
            return False
    n = count


            #################End##############################
    print("答对{}题,正确率为{}%,总分为{}".format(correct, correct / n * 100, correct * point))
    with open("date.txt", "a") as fp:
        now = datetime.datetime.now()
        fp.write(str(now))
        fp.write("   ")
        fp.write('题目数')
        fp.write("   ")
        fp.write(str(n))
        fp.write("   ")
        fp.write('正确题目数')
        fp.write("   ")
        fp.write(str(correct))
        fp.write("   ")
        fp.write('正确率')
        fp.write("   ")
        fp.write(str(correct / n * 100))
        fp.write("   ")
        fp.write('分数')
        fp.write("   ")
        fp.write(str(correct * point))
        fp.write("\n")



if __name__ == '__main__':
    num = int(input('请输入出题数量:'))
    m = int(input('请输入参与计算的最大数字:'))
    calculator(num, m)

测试题目是否符合四则运算单元测试

import random
import time
import datetime

random.seed(time.perf_counter())


def calculator(n, maximum):
    """随机产生n道正整数四则运算的题目,用户输入计算结果,
    判断输入正确与否,并统计正确率。题目保证减法不出现负数."""
    point = 100/n
    ope1 = str(input('请输入第一个运算符号:'))
    ope2 = str(input('请输入第二个运算符号:'))
    ope3 = ope1
    ope4 = ope2
    correct = 0
    count = 0
    max_final = 0
    for i in range(n):  # 循环n次,每次产生一个新问题
        b = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        a = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        c = random.randint(0, maximum)  # 随机产生一个随机数,使其具有两个运算符
        max1 = max(a,b,c)
        if max1 > max_final:
            max_final = max1
        #################Begin##############################
        print(f'{a}{ope1}{b}{ope2}{c}=', end='')
        result = float(input())
        count = count + 1
        if result == eval(f"{a}{ope1}{b}{ope2}{c}"):
            correct = correct + 1
            print("恭喜你,回答正确")
        return True
    n = count


            #################End##############################
    print("答对{}题,正确率为{}%,总分为{}".format(correct, correct / n * 100, correct * point))
    with open("date.txt", "a") as fp:
        now = datetime.datetime.now()
        fp.write(str(now))
        fp.write("   ")
        fp.write('题目数')
        fp.write("   ")
        fp.write(str(n))
        fp.write("   ")
        fp.write('正确题目数')
        fp.write("   ")
        fp.write(str(correct))
        fp.write("   ")
        fp.write('正确率')
        fp.write("   ")
        fp.write(str(correct / n * 100))
        fp.write("   ")
        fp.write('分数')
        fp.write("   ")
        fp.write(str(correct * point))
        fp.write("\n")



if __name__ == '__main__':
    num = int(input('请输入出题数量:'))
    m = int(input('请输入参与计算的最大数字:'))
    calculator(num, m)

        性能分析

        性能分析图如下图所示

        由图中可得,因为本次设计的程序仅有两个函数,运行所耗费的时间太短短导致无法统计时间,从而无法再在原有基础上进行优化。

        代码说明

if __name__ == '__main__':
    num = int(input('请输入出题数量:'))
    point = 100/num
    m = int(input('请输入参与计算的最大数字:'))
    ope1 = str(input('请输入第一个运算符号:'))
    ope2 = str(input('请输入第二个运算符号:'))
    calculator(num, m)

        这段代码用于用户交互,分别通过设置五个变量,控制出题数目、每道题目的得分、参与运算的最大数字、参与计算的运算符号。在代码的最后一段调用calculator函数,该函数为用户自定义的函数具体代码如下

def calculator(n, maximum):
    """随机产生n道正整数四则运算的题目,用户输入计算结果,
    判断输入正确与否,并统计正确率。"""
    correct = 0
    for i in range(n):  # 循环n次,每次产生一个新问题
        b = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        a = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        c = random.randint(0, maximum)  # 随机产生一个随机数,使其具有两个运算符
        #################Begin##############################
        print(f'{a}{ope1}{b}{ope2}{c}=', end='')
        result = float(input())
        if result == eval(f"{a}{ope1}{b}{ope2}{c}"):
            correct = correct + 1
            print("恭喜你,回答正确")

            #################End##############################
    print("答对{}题,正确率为{}%,总分为{}".format(correct, correct / n * 100, correct * point))
    with open("date.txt", "a") as fp:
        now = datetime.datetime.now()
        zqv = correct / n * 100
        df = correct * point
        fp.write(str(now))
        fp.write("   ")
        fp.write('题目数')
        fp.write("   ")
        fp.write(str(n))
        fp.write("   ")
        fp.write('正确题目数')
        fp.write("   ")
        fp.write(str(correct))
        fp.write("   ")
        fp.write('正确率')
        fp.write("   ")
        fp.write(str(correct / n * 100))
        fp.write("   ")
        fp.write('分数')
        fp.write("   ")
        fp.write(str(correct * point))
        fp.write("\n")

        在该段代码当中,通过eval函数来判断答案是否正确,并通过correct变量来存储正确回答题道数。在往data.txt中写入的代码中。now变量用来存储当前时间,zqv、df变量表示正确率和得分,但实际中没有使用,fp相关函数为分别往txt存储数据。

        个人收获

        通过本次结对项目的学习,首先对于前面学习的项目的迁入,fork等功能进行了复习,同时学习了如何使用python进行相关的单元测试,学习了time库和random库的部分函数功能。其次,对于如何完成一个项目,以及项目的整体开发流程有了一个清晰的了解,学会了如何运用PSP进行效率分析。最后,学会了如何通过gitee建立需求、确定每个人的分工等功能。

        剩余编码要求截图部分

        readme截图

        关联需求截图

        任务分配、代码的迁入截图

        所有警告截图

        消除所有警告截图

        测试分支覆盖率截图

        补充功能

错题本记录功能:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值