结对编程——初读队友代码

  队友的个人项目是在pycharm环境下用python写的,共分为三个模块:Users;fouroperate;GUIapp,他们的功能分别如下:

GUIapp:主控制台模块,控制用户输入密码修改等级,输入信息等,加入了界面,可生成exe文件(这点真的超级棒,似乎花了队友大量的时间进行额外的学习,这点值得我学习)。

Users:用户信息模块,存储用户名、密码状态等。

fouroperate:控制表达式产生的模块。

  代码优点分析:

  1、注释清晰,在每个代码模块前、每个类、函数之前都有注释说明该模块的功能,代码的可读性强;

  2、用户信息采用类的形式存在数组中,便于添加和删除用户信息,也便于增加每个用户的信息内容(我代码的登录模块采取的是if else式的判断方式,可扩展性太差,对后续用户信息的更改和添加十分不友好);

#初始化用户库信息
g_u = []
#等级1
g_u.append(Users("张三1",123,0))
g_u.append(Users("张三2",123,0))
g_u.append(Users("张三3",123,0))
#等级2
g_u.append(Users("李四1",123,1))
g_u.append(Users("李四2",123,1))
g_u.append(Users("李四3",123,1))
#等级3
g_u.append(Users("王五1",123,2))
g_u.append(Users("王五2",123,2))
g_u.append(Users("王五3",123,2))

  3、生成了界面,为接下来的结对编程提供了许多便利(虽然这个QQ的图片着实是不太好看,后续有待更改制作更好看的界面);

  代码缺点分析:

  1、生成括号的时候采取的是一种伪随机的形式(我觉得不ok),该算法是层层往外加每一个式子的,在前两个操作数上判断是否加括号然后随机交换式子中前后部分的顺序,因为这样不会出现并列括号的形式,所以额外对有四个和五个操作数的情况判断,增加这种括号出现的情况;

    #随机生成小学难度等式,仅有加减乘除与括号
    def create_pripro(self):
        for c in range(self.num_problem):
            str1 = self.create_num()
            str2 = self.create_num()
            op = self.create_op()
            problem = self.combine2num(str1,str2,op)
            count = random.randint(0,3)
            #判断是否进行变形,加括号
            if(count>0):
                for j in range(count):
                    op = self.create_op()
                    str1 = problem
                    str2 = self.create_num()
                    change = random.randint(0,1)
                    if change == 0 :
                        str1 = ‘(‘+str1+‘)‘
                    change = random.randint(0,1)
                    if change == 0 :
                        temp = str1
                        str1 = str2
                        str2 = temp
                    problem = self.combine2num(str1,str2,op)
                #查重语句
                repet = self.read_txtname(problem)
                if repet == 0:
                    self.problems.append(problem)
            #处理括号平行情况
            if(count == 4):
                str3 = self.create_num()
                str4 = self.create_num()
                op = self.create_op()
                problem2 = self.combine2num(str3,str4,op)
                problem = ‘(‘+problem+‘)‘+self.create_op()+‘(‘+problem2+‘)‘
                # 查重语句
                repet = self.read_txtname(problem)
                if repet == 0:
                    self.problems.append(problem)
            if(count == 5):
                str3 = self.create_num()
                str4 = self.create_num()
                str5 = self.create_num()
                choice = random.randint(0,1)
                if(choice == 0):
                    problem2 = str3 + self.create_op() + str4 + self.create_op() + str5
                    change = random.randint(0, 1)
                    if change == 0:
                        temp = problem
                        problem = problem2
                        problem2 = temp
                    problem = ‘(‘+problem+‘)‘+self.create_op()+‘(‘+problem2+‘)‘
                if (choice == 1):
                    problem2 = str3 + self.create_op() + str4
                    change = random.randint(0, 1)
                    if change == 0:
                        temp = problem
                        problem = str5
                        str5 = temp
                    problem = ‘(‘+problem+‘)‘+self.create_op()+‘(‘+problem2+‘)‘+self.create_op()+str5

  2、在初中和高中控制高级操作符的产生时没能全部随机考虑到所有的可能情况,还是采取类似加括号的那种方式,并不是真随机,同时,在处理控制至少产生一个高级操作符的时候,没有控制好,没能实现这个需求,在测试中产生了 5+2=  这样的高中题目,令人发指;

   def create_highpro(self):
        for h in range(self.num_problem):
            str1 = self.create_num()
            str2 = self.create_num()
            op = self.create_op()
            problem = self.combine2num(str1,str2,op)
            count = random.randint(0,3)
            #判断是否进行变形,加括号
            if(count>0):
                for j in range(count):
                    flagc = 0
                    flaga = 0
                    op = self.create_op()
                    str1 = problem
                    str2 = self.create_num()
                    #flaga控制产生至少一个括号
                    if flaga == 0:
                        change = 0
                        flaga == 1
                    elif flaga == 1:
                        change = random.randint(0,1)
                    if change == 0 :
                        str1 = ‘(‘+str1+‘)‘
                    #此处判断加入哪一种三角函数
                    #flagc控制必须每道题目产生一个三角函数
                    if flagc == 0:
                        trifchange = random.randint(0,2)
                        flagc = 1
                    elif flagc == 1:
                        trifchange = random.randint(0, 10)
                    if trifchange == 0:
                        str1 = "sin"+str1
                    elif trifchange == 1:
                        str1 = "cos"+str1
                    elif trifchange == 2:
                        str1 = "tan"+str1
                    #此处判断是否开平方或者平方
                    middchange = random.randint(0,5)
                    if middchange == 1:
                        str1 = "√"+str1
                    elif middchange == 2:
                        str1 = str1 + "^2"
                change = random.randint(0,1)
                if change == 0 :
                    temp = str1
                    str1 = str2
                    str2 = temp
                problem = self.combine2num(str1,str2,op)
                self.problems.append(problem)
                # 查重语句
                repet = self.read_txtname(problem)
                if repet == 0:
                    self.problems.append(problem)
            else:
                trifchange = random.randint(0, 2)
                if trifchange == 0:
                    problem = "sin" + problem
                elif trifchange == 1:
                    problem = "cos" + problem
                elif trifchange == 2:
                    problem = "tan" + problem
                repet = self.read_txtname(problem)
                if repet == 0:
                    self.problems.append(problem)
        # 将结果打印输出
        self.write_txt()
        # 清空列表
        self.problems = []
            #print(problem)

  3、代码冗余的部分有些多,在一些的判断过程中,需要对几种情况进行重复的二次判断,有待改进。

  通过这次的代码交流学习,我认识到了自己代码的问题和缺点,从他人的代码中学习了一些优点,也在挑出队友代码中不合理部分的过程中提高了自习阅读代码的能力,也可以将队友代码中出现的问题引以为戒。最后,结对编程加油!一定要做得更好,冲鸭!

原文地址:https://www.cnblogs.com/piggirl/p/9715529.html

时间: 2024-11-05 20:36:58

结对编程——初读队友代码的相关文章

结对编程初体验——代码复审

这一次和室友结对编程,第一项任务就是互看代码.想到上一次这样认真看她的C++代码,是一年前学程序设计这门课时,帮她人工debug.虽然都是从头到尾认真读代码.通逻辑,感觉却是不同的,之前的关注点是bug在哪,而现在却是带着任务的,要关注代码核查表中的项目.结果看着看着,总感觉自己在找茬dbq 回归正题↓ 编译环境:Dev-C++ 5.9.2 程序语言:C++ (一)优点: 能发现的优点,大多都是自己的缺点 1.代码可读性强. 通过详细的注释,即便是我们两个的个人项目使用的不是同一种语言,我看懂她

结对编程初涉猎——结对伙伴的代码复审

至此为止,个人作业阶段就结束了,从此便进入团队合作阶段.这次是先从结对编程开始,虽然还没有进入正式的开发状态,但也是结对编程的小开端,同时也是一个复习代码复审这部分内容的过程. 阅读目录 1.题目要求 2.结对体验 3.代码审查表 4.队友代码及优缺点评价 5.个人感想 题目要求 要求: (1). 首先在同学中找一个同伴,范围不限,可以在1~5班中随意组合,建议尽量不要找同组的成员,女同学尽量找男同学结对,但是不做强制要求: (2). 从以往个人完成的项目中选择一个作品,例如:以往的数据结构课程

从结对编程初项目窥团队合作编程

一.  前言: 本次项目要求在个人项目的基础上,两人结对合作,对原有代码进行合作. 在上次的个人项目中,我的队友选择了Python进行开发,而我选择了Java:经过沟通后,这次的结对项目我们选择以Java版本的代码为基础,优化代码,添加模块. 二.  项目介绍: 项目名称: 带UI的小初高数学学习软件   2. 用户: 小学.初中和高中学生 3.功能: a.用户登陆注册功能和密码管理功能: 1)用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册; 2)用户完成注册后,界面提示

初读《代码大全》

对于<代码大全>这本书我还没有仔细的读,更别说是看完了,我就重点看了一下第三.四章,主要讲软件工程的前期准备,其次就是我大致浏览了一下后面的内容.第一感觉就是作者写得相当好,插入了不少段子,比喻形象,生动诙谐.但是没有深入的研读难以给出有意义的问题,想问题快把我想得头都要爆炸了,最终还挤出了几个问题.虽然本书主要讲的是软件构建过程,下面的问题主要集中在软件架构相关的领域.1字符集总是让人捉摸不透,那么常用的编程语言都分别支持哪些字符集,如何用这种语言编写制定字符集的程序?字符串类型和字符集类型

第一次的结对编程

选择题目 题目1: 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求: - 能够自动生成四则运算练习题 - 可以定制题目数量 - 用户可以选择运算符 - 用户设置最大数(如十以内.百以内等) - 用户选择是否有括号.是否有小数 - 用户选择输出方式(如输出到文件.打印机等) - 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主) 我在这次作业中担任的是领航员,何涛是驾驶员 一.单元测试 1.运行结果 (1)目录界面 (2)整数运算 (3)分数运算 (4)

结对编程 By:李畅&amp;李雅楠

开始.结束与开始 by李畅 李雅楠 看似漫长实则短暂的结对编程项目就这么结束了.细细回想起来,其中更有着点滴的感悟与体会.那么,让我们一切从头说起,慢慢回味其中的点滴. Part 1 初遇结对编程,对其中的点滴真的是可以说完全不了解.结对编程?如何去做?怎么去做?又会有什么结果?一切,起于未知. 而在从个人项目到结对编程项目转换的初始,就开始体会到结对编程项目的细微好处了.首先是相互之间的互看代码.(先例行感慨一下自己的搭档真的很厉害)在互看代码的过程中,我们开始了解对方的思路,开始明确对方的想

结对编程1-四则运算

结对编程1-四则运算 代码地址: https://coding.net/u/q596926716/p/dfs/git/upload/master/ 结对伙伴:黄子敬 一.题目要求 将第一次作业中的四则运算程序做成GUi界面的形式展示出来,要求在下面的功能需求中实现两个: 1.记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算. 2.有计时功能,能显示用户开始答题后的消耗时间. 3.界面支持中文简体/中文繁体/英语,用户可以选择一种 二.需求分析: 1.除了整数的

实验二 结对编程 第一阶段

一.实验目标: 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 三.实验过程 1)查阅相关资料加深对敏捷开发和结对编程的理解: 敏捷开发:敏捷开发是一种从1990年代开

结对编程(第二阶段)

一.实验目标 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 1.代码规范 (1)类名首字母应大写,字段.方法名以及对象的首字母小写,代码中的命名不允许使用中文,包名使