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

结对项目

时间:2024-09-27 18:23:15浏览次数:1  
标签:结对 strToFrac 题目 项目 argv print fracAcc div

结对项目 ———— 四则运算的实现

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34
这个作业要求在哪 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230
这个作业的目标 设计一个四则运算生成器
项目成员一 梁俊轩 3122004575
项目成员 雷棋皓 3122004868
github地址 项目地址

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 22
· Estimate · 估计这个任务需要多少时间 500 511
Development 开发 300 350
· Analysis · 需求分析 (包括学习新技术) 20 13
· Design Spec · 生成设计文档 13 9
· Design Review · 设计复审 9 10
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 5 6
· Design · 具体设计 10 8
· Coding · 具体编码 60 65
· Code Review 代码复审 10 8
· Test 测试(自我测试,修改代码,提交修改) 60 50
Reporting 报告 30 36
· Test Repor 测试报告 20 30
· Size Measurement 计算工作量 10 11
· Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 18
合计 500 511

性能分析

这里引入了cProfile进行性能分析
生成题目的过程:

生成题目的makeExe函数总体用了0.006秒,其中生成三个数运算题耗时最多。

核对答案的过程:

耗时0.002秒,性能较好

代码及设计

进行运算题操作的模块exercise:

类定义:
class exercise: def __init__(self, account=100, range=10): self.account = account self.range = range
生成题目函数:

def makeExe(self):
    localtime = time.asctime(time.localtime(time.time()))
    # 清理文件内容
    with open("Exercise.txt", 'w') as exercise_file:
        exercise_file.write("题目数量 : " + str(self.account) + "\t时间 :" + localtime + "\n")
        exercise_file.close()
    with open("Answer.txt", 'w') as Answer_file:
        Answer_file.close()

    que_order = 0
    repeat = testRepeat()
    makeQue = randomMake(repeat, self.range)
    # 生成account道题
    while que_order < self.account:
        choose2_3 = 2 + random.randint(0, 1)
        # 两个数的运算题生成
        if choose2_3 == 2:
            makeQue.question_2bits(que_order + 1)
        # 三个数的运算题生成
        elif choose2_3 == 3:
            makeQue.question_3bits(que_order + 1)
        que_order = que_order + 1

算法流程图:

核对答案函数:

def confirmExe(self, exeFile, userFile):
    corrctQue = []  # 记录用户的错题和对题
    wrongQue = []
    try:
        with open(exeFile) as exeFile:  # 读取题目文件
            with open(userFile) as userFile:  # 读取用户文件
                orderLine = 1  # 记录核对的第几道题
                lineExe = exeFile.__next__()
                fracAcc = fracHandle()
                for lineExe in exeFile:  # 遍历题目
                    lineExe = lineExe.strip()
                    div = lineExe.split(" ")
                    # 两个数的题目
                    if len(div) == 5:
                        frac1 = fracAcc.strToFrac(div[1])
                        frac2 = fracAcc.strToFrac(div[3])
                        rightAnswer = fracAcc.fracAccount(frac1, frac2, div[2])
                        rightAnswer = fracAcc.fracToStr(rightAnswer)
                    # 三个数
                    elif len(div) == 7:
                        # 如果式子中有括号
                        if '(' in lineExe:
                            for locate in range(7):
                                # 如果式子中有括号
                                if '(' in div[locate]:
                                    # 如果括号在左边
                                    if locate == 1:
                                        leftFrac = fracAcc.strToFrac(div[1].replace("(", ""))
                                        rightFrac = fracAcc.strToFrac(div[3].replace(")", ""))
                                        thirdFrac = fracAcc.strToFrac(div[5])
                                        firstSum = fracAcc.fracAccount(leftFrac, rightFrac, div[2])
                                        rightAnswer = fracAcc.fracToStr(
                                            fracAcc.fracAccount(firstSum, thirdFrac, div[4]))
                                    else:
                                        leftFrac = fracAcc.strToFrac(div[3].replace("(", ""))
                                        rightFrac = fracAcc.strToFrac(div[5].replace(")", ""))
                                        thirdFrac = fracAcc.strToFrac(div[1])
                                        firstSum = fracAcc.fracAccount(leftFrac, rightFrac, div[4])
                                        rightAnswer = fracAcc.fracToStr(
                                            fracAcc.fracAccount(thirdFrac, firstSum, div[2]))
                        # 如果式子没括号
                        else:
                            leftFrac = fracAcc.strToFrac(div[1])
                            rightFrac = fracAcc.strToFrac(div[3])
                            thirdFrac = fracAcc.strToFrac(div[5])
                            if (div[2] == '+' or div[2] == '-') and (div[4] == '*' or div[4] == "÷"):
                                firstSum = fracAcc.fracAccount(rightFrac, thirdFrac, div[4])
                                rightAnswer = fracAcc.fracToStr(fracAcc.fracAccount(leftFrac, firstSum, div[2]))
                            else:
                                firstSum = fracAcc.fracAccount(leftFrac, rightFrac, div[2])
                                rightAnswer = fracAcc.fracToStr(fracAcc.fracAccount(firstSum, thirdFrac, div[4]))
                    else:
                        print("题目出错。")
                    try:
                        userAnswer = userFile.__next__().split(' ', 2)
                        # 如果用户答案还存在的话
                        if userAnswer[0] != '\n':
                            if (userAnswer[1].strip() == rightAnswer.strip()):
                                corrctQue.append(orderLine)
                            else:
                                wrongQue.append(orderLine)
                        # 用户答案已空
                        else:
                            print("同学,你第" + str(orderLine) + "题未完成。")
                            wrongQue.append(orderLine)
                        orderLine = orderLine + 1
                    except StopIteration:
                        print("同学,你第" + str(orderLine) + "题未完成。")
                        wrongQue.append(orderLine)
                        orderLine = orderLine + 1

                print()
                print("批卷完毕,答题情况如下:")
                print("Correct: " + str(len(corrctQue)))
                print(str(corrctQue))
                print("Wrong: " + str(len(wrongQue)))
                print(str(wrongQue))

                # 答题情况写入Grade.txt
                with open("Grade.txt", 'w') as grade_file:
                    grade_file.write("Correct: " + str(len(corrctQue)))
                    grade_file.write(str(corrctQue) + '\n')
                    grade_file.write("Wrong: " + str(len(wrongQue)))
                    grade_file.write(str(wrongQue) + '\n')
    except FileNotFoundError:
        print("找不到文件!请重新输入!")

算法流程图:

主函数

inputLen = len(argv)
 
if (inputLen == 5) and ('-r' in argv) and ('-n' in argv):
    # 获取题目的数量和范围
    for i in range(inputLen): 
        if argv[i] == '-r':
            userRange = int(argv[i + 1])
        elif argv[i] == '-n':
            userAccount = int(argv[i + 1])
        else:
            continue
    mathExercise = exercise(userAccount, userRange)
    mathExercise.makeExe()
    print("四则计算题已生成完毕,请在文件Exercise.txt中按格式完成。")
       # 如果需要对答案
elif (inputLen == 5) and (argv[1] == '-e') and (argv[3] == '-a'):
    mathExercise = exercise()
    exerciseFile = argv[2]  # 获取题目文件
    answerFile = argv[4]  # 获取用户需要核对的文件
    mathExercise.confirmExe(exerciseFile, answerFile)
    print("同学,您的答题情况已存入Grade.txt中")
else:
    print("输入错误!正确的输入格式:python Myapp.py -n (...) -r (...)(n代表题目数量,r代表数字范围,请在括号内填写正确的数字)")

通过输入命令行语句,可进行题目生成与答案核对两个功能。

运行结果

这里采用了图形化设计:
界面整体:

输入题目数量与数值范围:

点击生成题目后,提示计算题生成完毕:

生成的exercise文件Exercise.txt:

生成的标准答案文件Answer.txt:

此时填写一个对应格式的用户答题的文件,此处取名为user.txt:

此处我故意把2、5、9题的答案写为错误答案

之后在程序中填写上题目文件名与用户填写的答案的文件名:

点击批阅题目后:
显示正确与错误的题目数与具体题号:

最后生成对应的Grade.txt文件:

项目小结

· 这次的结对项目让我们收获颇丰,因为之前我们都很少有这种双人合作共同完成一个项目的经验。
· 两个人合作的项目可以更好地帮助对方解决困难,二人之间的交流也可以提升代码的质量。
· 这次项目丰富了我们进行合作项目的经验,更好地体会到了如何进行多人的项目开发。

标签:结对,strToFrac,题目,项目,argv,print,fracAcc,div
From: https://www.cnblogs.com/liangjunxuan/p/18429008

相关文章

  • 自然语言处理实战项目:从理论到实现
    一、引言自然语言处理(NLP)是计算机科学、人工智能和语言学交叉的领域,旨在让计算机能够理解、处理和生成人类语言。随着互联网的飞速发展,大量的文本数据被产生,这为自然语言处理技术的发展提供了丰富的素材,同时也对其性能提出了更高的要求。在本文中,我们将详细阐述一个自然语......
  • 结对项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-12这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13221这个作业的目标结对合作完成项目两位同学的姓名许莹柔,学号:3222004684肖晓霞,学号:322200......
  • GitHub每日最火火火项目(9.27)
    项目名称:localsend/localsend项目介绍:“localsend/localsend”是一个极具价值的开源项目。它为用户提供了一种跨平台的文件传输替代方案,可媲美AirDrop。在当今数字化时代,人们常常需要在不同操作系统的设备之间传输文件,但并非所有设备都能使用AirDrop。这个项目的出......
  • Springboot大学生创新创业项目管理系统sg2u6(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,专家,项目类别,项目申报,中期检查,中期评价,项目结题,结题评价开题报告内容一、研究背景与意义在当前的知识经济时代,创新创业已成为推动社会发展和提......
  • 软件工程结队项目:基于C++实现的自动生成小学四则运算的命令行程序
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标<运用C++实现四则运算法则的命令行程序>团队成员1李梓灏3122004695团队成员2吴......
  • 快速创建SpringBoot项目
     1.使用SpringInitializr创建项目1.1.在线生成项目         访问SpringInitializr网站            选择项目的基本配置:Project:MavenProject或GradleProject(通常使用Maven)Language:JavaSpringBootVersion:......
  • 第二部分 项目结构、代码风格与标识符命名
    目录第5条使用得到公认且广泛使用的项目结构第6条提交前使用gofmt格式化源码第7条使用Go命名惯例对标识符进行命名第5条使用得到公认且广泛使用的项目结构第6条提交前使用gofmt格式化源码第7条使用Go命名惯例对标识符进行命名......
  • 建筑的抗震等级与建筑资质中哪些项目有关?
    在地震多发地带,建筑物的抗震性能是保障人民生命财产安全的关键因素。抗震等级作为建筑设计中的一个重要指标,与建筑资质紧密相关。建筑的抗震等级与建筑资质中以下项目有关:1.工程设计资质:抗震设计是建筑设计的重要组成部分,设计单位必须具备相应的设计资质,以确保其设计的建......
  • [微信小程序原创项目]基于Springboot+Vue+Uniapp的通用商城小程序、商城管理系统
    项目提供:完整源码+数据库sql文件+数据库表Excel文件关注我的B站:程序员阿水呀,带小白学习更多干货教程!1、项目功能描述本项目为双角色,用户和管理员,用户使用小程序前台,管理员使用web后台。1.1注册注册功能:填写用户名、密码进行注册。仅开放小程序端即用户端进行注册。......
  • 小说推文实操教程,不用成本的落地项目怎么做
    小说推文大致分为五个步骤,即:一、选爆文做小说推文讲究账号垂直,目前推文主要以甜宠文、悬疑文、穿越文、职场文等为主,咱们首先要做的就是确定一个推文方向,找所选文章有专门的爆炸库前期推高分的。二、申请关键词申请关键词也就是授权,如果你没有授权,做得再好都是白搭,因为你没......