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

Posted piggirl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对编程——初读队友代码相关的知识,希望对你有一定的参考价值。

  队友的个人项目是在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、代码冗余的部分有些多,在一些的判断过程中,需要对几种情况进行重复的二次判断,有待改进。

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


以上是关于结对编程——初读队友代码的主要内容,如果未能解决你的问题,请参考以下文章

结对编程-队友代码分析

结对编程队友代码分析

结对编程-队友代码分析

结对编程----分析队友代码

结对编程-队友代码分析

结对编程之队友互评