实验二 结对编程(阶段二)
实验目标
1. 体验敏捷开发中的两人合作。
2. 进一步提高个人编程技巧与实践。
实验内容
1. 根据以下问题描述,练习结对编程(pair programming)实践;
2. 要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求;
3. 要求在结对编程工作期间,两人的角色至少切换 4 次;
4. 编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
实验记录
阶段二:
一、代码规范
本次我们用到Python为编程语言,我们总结了应该主要从以下几点特别注意:
1、Python语句的缩进
Pyhton语言与Java、C#等编程语言最大的不同点是,Python代码块使用缩进对齐表示代码逻辑,而不是使用大括号。这对习惯用大括号表示代码块的程序员来说,确实是学习Python的一个障碍。
Python每段代码块缩进的空白数量可以任意,但要确保同段代码块语句必须包含相同的缩进空白数量。
2、Python标识符
标识符用于Python语言的变量、关键字、函数、对象等数据的命名。标识符的命名需要遵循下面的规则。
① 可以由字母(大写A—Z或小写a—z)、数字(0—9)和_(下划线)组合而成,但不能由数字开头;
② 不能包含除_以外的任何特殊字符,如:%、#、&、逗号、空格等;
③ 不能包含空白字符(换行符、空格和制表符称为空白字符);
④ 标识符不能是Python语言的关键字和保留字;
⑤ 标识符区分大小写,num1和Num2是两个不同的标识符。
⑥ 标识符的命名要有意义,做到见名知意。
3、Python关键字
Python预先定义了一部分有特别意义的标识符,用于语言自身使用。这部分标识符称为关键字或保留字,不能用于其它用途,否则会引起语法错误,随着Python语言的发展,其预留的关键字也会有所变化。
4、Python变量
用标识符命名的存储单元的地址称为变量,变量是用来存储数据的,通过标识符可以获取变量的值,也可以对变量进行赋值。对变量赋值的意思是将值赋给变量,赋值完成后,变量所指向的存储单元存储了被赋的值,在Pyhton语言中赋值操作符为“=、+=、-=、*=、/=、%=、**=、//=”。
5、注释
Python编程语言的单行注释常以#开头,单行注释可以作为单独的一行放在被注释代码行之上,也可以放在语句或者表达式之后。在使用pychar过程中,我们发现注释是#之后要加一个空格,而且不能与制表符混用。
总结以上,我么得知Python的语法有二点需要注意:(1)Python同一代码块的缩进要对齐,不然就会出现语法错误;(2)Python在字符串表示上和其它语言有所不同,Python的字符串可以用单引号(’)、双引号(”)、三引号(’’’)表示。
以上主要参考:https://baijiahao.baidu.com/s?id=1610480755579501812&wfr=spider&for=pc
二、程序的总体设计
1. 组成
2. 各模块说明
(1)初始化地图:
init_map(rows, cols):创建二维列表,使用随机函数赋值,0代表死细胞,1代表活细胞:用户可自由输入地图的长与宽,返回二维数组。
(2)合法性检测:
check_int(date):检测输入的数据是否为正整数,是返回整型的数据,不是返回0。
(3)合法性检测:
check_int(date):检测输入的数据是否为正整数,是返回整型的数据,不是返回0。
(4)演化下一个地图:
cell_laws(mov_map):根据以下生命法则
- 每个细胞的状态由该细胞及周围 8 个细胞上一次的状态所决定;
- 如果一个细胞周围有 3 个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;
- 如果一个细胞周围有 2 个细胞为生,则该细胞的生死状态保持不变;
对已有的地图进行检测,推断出每个位置细胞的下一状态,并存到一个新的二维列表里返回,用一个整型变量记录该位置周围活细胞数量,在判断细胞周围细胞状态时,采用对二维列 表的遍历操作,python对数组的下标往下溢出时会自动处理,就是在对最左边细胞的左侧细胞判断时,默认判断的是最右边的细胞状态,那么我们只需要处理上限溢出,在判断时加一个对列表长度的取模运算即可,这样就解决了边缘细胞的问题,再将细胞状态一一赋给新的二维列表并返回。
(5)打印地图:
为了使结果更美观的展示,我们去查阅了python的一些动画库,最后选择了pygame,将列表的值通过不同颜色打印出来,加上延时控制,打印出一幅幅画面,产生动画的效果。
三、交互过程
我们使用QQ远程桌面来实现两个人控制一台电脑以及QQ语音通话进行交流。在实验中我们实现了一个人控制电脑另一个人进行协助,然后角色互换。在这里特别注意到了协助的队员要更加仔细检查代码的规范性。
四、详细代码
最后改进,在103行以后添加:
五、实验结果
实验小结
- 由于是进行远距离的线上结对编程实验,我们双方的时间有时候并不能完全吻合,必须提前确定下一次共同进行实验的时间,这样才不会在时间上有冲突。
- 进行线上编程,我们使用的是QQ远程控制桌面以及QQ语音电话进行交流与合作,有时会因为信号问题导致交流中断。
- 优化前我们的代码很简单,后来使查阅了python的一些动画库,最后选择了pygame,将列表的值通过不同颜色打印出来,加上延时控制,打印出一幅幅画面,产生动画的效果。
- 优化前我们运行窗口不能关闭,必须强制停止,后来百度上搜索了相似的问题,在程序末尾添加了以下部分,得到了解决。
- 此次结对编程实验花费的时间比较长,从前期组队开始到最后完成代码并且有一个结果,是队员共同努力的结果,我感受到了结对编程最重要的就是两个人之间积极合作,分工明确,有效沟通都是必不可少的方面。而代码部分就是之前的学习成果的一个小小的检查,虽然在编写前已经做了关于代码规范性方面的问题,但是编写程序的时候还是触及到了代码不规范,这就是平时写代码的次数不够的原因,以后还要多多练习。