首页 > 其他分享 >结对项目

结对项目

时间:2024-03-26 13:48:02浏览次数:26  
标签:结对 项目 res 30 list bag num limit

结对项目

这个作业属于哪个课程 软件工程
这个作业要求在哪里 结对作业
这个作业的目标 制作一个自动生成十以内四则运算的项目,熟悉结对项目的开发
Github仓库 Github
姓名 郑炜 冯可富
学号 3122004504 3122004476

PSP表

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 35
· Estimate ・估计这个任务需要多少时间 30 25
Development 开发 500 550
· Analysis ・需求分析 (包括学习新技术) 120 100
· Design Spec ・生成设计文档 45 40
· Design Review ・设计复审 20 20
· Coding Standard ・代码规范 (为目前的开发制定合适的规范) 20 15
· Design ・具体设计 60 80
· Coding ・具体编码 120 140
· Code Review ・代码复审 30 30
· Test ・测试(自我测试,修改代码,提交修改) 90 100
Reporting 报告 30 40
· Test Repor ・测试报告 30 30
· Size Measurement ・计算工作量 30 25
· Postmortem & Process Improvement Plan ・事后总结,并提出过程改进计划 30 30
・合计 1185 1290

实现过程

生成运算式

  • 1.使用random.randint生成运算符的个数、所需数字、分数个数,然后同样用random.randint产生所需数字的列表并计算出分数(使用fraction库),最后统计出所用到的数字列表。其次,保证分数优先运算添加括号。
  • 2.使用 random.choice选择符号插入数字列表,把列表转换成string再使用eval函数计算出结果。此时,结果是分数应该是float型的循环小数,再使用fraction中的limit_denominator把结果转换成分数。若结果小于0大于r 、分母大于r重新生成数字列表和结果。再通过自建的字典对应手写的加减乘除符号和转换真分数,把数字列表和结果准换成字符串。
  • 3.最后采用字典存储等式、问式、答案,在存储等式前进行判断是否有存过,有则重新生成。
点击查看代码
def make_questions(num, limit):  # 产生题目
    no = 1  # 题目序号
    text_list = dict()  # 整条等式
    answer_list = dict()  # 答案部分
    question_list = dict()  # 问题部分
    while no <= num:  # 循环产生num个题目
        res, num_list = text(limit)
        if res < 0 or res > limit or res.denominator > limit:  # 若结果为0、大于r分母大于r则重新生成
            continue
        else:
            tag = 0  # 标记是否重复
            question = request_format(num_list)
            num_list.append("=")
            num_list.append((str(res)))
            exp = request_format(num_list)
            for i in text_list:  # ------------但生成式子多时效率很低------换种查找
                if text_list.get(i) == question:  # 判断是否有相同的式子后加入
                    tag = 1
            if tag == 1:  # 判断是否新增题目
                continue
            else:  # 新增题目
                text_list[no] = question
                question_list[no] = exp
                if res > 1 and res.denominator != 1:  # 转换为真分数
                    integer_part = res // 1  # 得到整数部分
                    proper_fraction = res % 1  # 得到真分数部分
                    res = "{}\'{}".format(integer_part, proper_fraction)
                answer_list[no] = res
                no += 1

    return [text_list, answer_list, question_list]  # 返回整个等式 答案 问式

文件读写

调用make_quesetions函数取得字典返回值后,使用with...as打开文件,循环取得键入key,在依次写入Exercises.txt和Answer.txt中。

def file(num,limit):
    startT = time()             #起始时间
    bag = make_questions(num,limit) #bag取make_questions的返回值列表
    with open('Exercises.txt','w',encoding='utf-8') as f:   #问题
        for i in range(num):
            question = bag[0][i+1]      #bag[0]是问题字典
            f.write("{}. {}\n".format(i+1,question))
    with open('Answer.txt','w',encoding='utf-8') as k:      #答案
        for i in range(num):
            answer = bag[1][i+1]        #bag[1]是答案字典
            k.write("{}. {}\n".format(i+1,answer))
    with open('test.txt','w',encoding='utf-8') as g:        #整式
        for i in range(num):
            test = bag[2][i+1]          #bag[2]是整式字典
            g.write("{}. {}\n".format(i+1,test))

    endT = time()               #终止时间
    print("time = %.2g 秒\n" % (endT - start))

主要函数

使用命令行参数控制生成的题目数量以及数字的范围。

点击查看代码
def main():
    str_input = ''
    for i in range(1, len(sys.argv)):
        str_input += sys.argv[i]
    num_arg = '-n([\d]+)'
    limit_arg = '-r([\d]+)'
    num = int(re.search(num_arg,str_input).group(1))
    limit = int(re.search(limit_arg,str_input).group(1))
    if (num <= 0) or (limit <= 0):
        print("[-]参数错误")
        print("exiting")
        return
    else:
        file(num,limit)
        return 0

测试

生成十道题目。
问题答案
输入

生成10000道题目
问题答案

输入

代码覆盖率

代码覆盖率

总结

  • 郑炜:在生成题目部分,有部分代码好像进行了重复的操作,感觉可以进行优化精简。有的地方当数据庞大的时候效率不够搞,感觉还可以采用更好的存储方式和算法。
  • 冯可富:文件写入函数内重复内容过多,应该再用一个函数来使得代码精简一点。这次结对项目过程我俩就沟通时间不算多,就这点而言我觉得我俩应该在改进一下,尽量做到实时沟通进度,这样就会更高效的完成项目。

标签:结对,项目,res,30,list,bag,num,limit
From: https://www.cnblogs.com/ChronoArk/p/18094908

相关文章

  • javaWeb项目-快捷酒店信息管理系统功能介绍
    开发工具:IDEA、Eclipse编程语言:Java数据库:MySQL5.7+框架:ssm、Springboot前端:Vue、ElementUI关键技术:springboot、SSM、vue、MYSQL、MAVEN数据库工具:Navicat、SQLyog项目关键技术 1、JSP技术JSP(Java脚本页面)是Sun和许多参与建立的公司所提倡的动态web技术。Ja......
  • 结对项目
    这个作业属于哪个课程软件工程这个作业要求在哪里结对项目一、合作者姓名学号张楠3222004599周广3122004418github链接二、PSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实际耗时(分钟)Planning计划4030·Es......
  • 结对项目
    杨宇航3122004498赵军3122004501这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024这个作业要求在哪里结对项目-作业-软件工程2024-班级博客-博客园(cnblogs.com)这个作业的目标1.能够生成包含自然数和真分数的四......
  • 信息系统项目管理师——第7章项目立项管理
    本章考选择题2-3分,案例和论文均有可能作为领域考试。项目建议与立项申请♥♥♥♥♥立项申请的概念立项申请又称为项目建议书,是项目建设单位向上级主管部门提交项目申请时所必须的文件,是该项目建设筹建单位根据国民经济的发展、国家和地方中长期规划、产业政策、生产力......
  • 海量数据处理项目-账号微服务和流量包数据库表+索引规范(下)
    海量数据处理项目-账号微服务和流量包数据库表+索引规范(下)第2集账号微服务和流量包数据库表+索引规范讲解《下》简介:账号微服务和流量包数据库表+索引规范讲解账号和流量包的关系:一对多traffic流量包表思考点海量数据下每天免费次数怎么更新?海量数据付费流量套餐包每天......
  • 使用Go语言开发一个短链接服务:三、项目目录结构设计
    章节 使用Go语言开发一个短链接服务:一、基本原理 使用Go语言开发一个短链接服务:二、架构设计 使用Go语言开发一个短链接服务:三、项目目录结构设计 使用Go语言开发一个短链接服务:四、生成code算法 使用Go语言开发一个短链接服务:五、添加和获取短链接 使用Go语言开......
  • 智慧工地解决方案,智慧工地项目管理系统源码,支持大屏端、PC端、手机端、平板端
    智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最线实现项目对人、机、料、法、环的全方位实时监控。支持多端展示(大屏、PC端、手机端、平板......
  • vue3+ts项目引入富文本编辑器wangeditor
    说明项目开发中,做到媒体说、资讯等模块时,会需要引入富文本编辑器,对比发现wangeditor使用群众多,并且很多问题也已经有解答。界面展示实现要点引入wangeditor配置导航栏代码<template><divstyle="border:1pxsolid#EEEFF0;border-radius:5px;overflow:hidden;wid......
  • Springboot项目的main函数入口,如何像jar包一样接受参数
    一般来说,springboot项目是提供服务的,但是也可以用到导出jar来启动,那么如何介绍参数呢:packagecom.example.TestDemo;importcom.example.jmeter.bean.TestCaseResult;importcom.example.jmeter.controller.JmeterController;importlombok.extern.slf4j.Slf4j;importorg.......
  • 使用Github托管Unity项目
    ​准备工作在本机生成ssh密钥ssh-keygen-trsa-C"你的邮箱地址"点击回车后会出现生成的密钥路径,我们直接打开密钥复制下来。github官网添加我们的本机密钥进入Github官网,点击设置,选择SSHandGPGkeys点击newSSHkey,将我们刚才在本机生成的ssh密钥放入key中,并起......