码迷,mamicode.com
首页 > 其他好文 > 详细

结对编程 第二阶段

时间:2020-04-01 00:35:31      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:下划线   矩形   self   判断   用户输入   其它   函数默认参数   put   博客   

结对编程

一、实验目标:

1)体验敏捷开发中的两人合作。

2)进一步提高个人编程技巧与实践。

二 、实验内容:

1)根据以下问题描述,练习结对编程(pair programming)实践;

2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。

3)要求在结对编程工作期间,两人的角色至少切换 4 次;

4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

三、问题描述(二选一)

1)生命游戏

    生命游戏是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。

    游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。

    游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:

  • 每个细胞的状态由该细胞及周围 8 个细胞上一次的状态所决定;

  • 如果一个细胞周围有 3 个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;

  • 如果一个细胞周围有 2 个细胞为生,则该细胞的生死状态保持不变;

  • 在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。

2)开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,然后用户回答,并且进行打分。

规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。要求总计输出10个运算式,每输出一个运算式,等待输入结果,然后进行对错判断并输出。最后输出统计答对的题数与分

四、其他要求

1)在博客园https://www.cnblogs.com/注册个人账号,记录二个人的编程实现过程,遇到的问题及解决方法。

2)在github上托管二个人项目的代码,采用git对项目代码进行管理。

 

实验过程记录

1、代码规范

(1)代码编排

  ①缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
  ②每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
  ③ 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。

(2)文档编排
  ①模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。
  ②不要在一句import中多个库。
  ③如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。

 (3)空格的使用(总体原则,避免不必要的空格)

   ①各种右括号前不要加空格。

   ②逗号、冒号、分号前不要加空格。

   ③函数的左括号前不要加空格。
   ④序列的左括号前不要加空格。
   ⑤ 操作符左右各加一个空格,不要为了对齐增加空格。
   ⑥函数默认参数使用的赋值符左右省略空格。
   ⑦ 不要将多句语句写在同一行,尽管使用‘;’允许。
   ⑧if/for/while语句中,即使执行语句只有一句,也必须另起一行。

(4)注释

    ①总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!
    ②注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。

(5)文档描述
   ①为所有的共有模块、函数、类、方法写docstrings;非共有的没有必要,但是可以写注释(在def的下一行)。
   ②如果docstring要换行。

(6)命名规范

   ①模块命名尽量短小,使用全部小写的方式,可以使用下划线。
   ② 包命名尽量短小,使用全部小写的方式,不可以使用下划线。
   ③类的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方式。
   ④异常命名使用CapWords+Error后缀的方式。
   ⑤全局变量尽量只在模块内有效,类似C语言中的static。
   ⑥函数命名使用全部小写的方式,可以使用下划线。
   ⑦常量命名使用全部大写的方式,可以使用下划线。
   ⑧类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。
   ⑨类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。
   ⑩类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。

 

2、程序的总体设计

技术图片

3、程序结对编程过程(附图)及功能实现情况(附代码和图)

(1)结对编程过程

由于之前做过关于四则运算的课设,所以对它算法的基本思想还是比较了解。但是此次要求又大不相同,所以吴宇森同学负责了从网上找代码模板,然后我们一起按照老师给出的要求进行修改和添加。我们是通过QQ远程控制桌面以及语音通话来解决结对编程的问题,遗憾的是重心放错了地方,在修改过程中忘记使用github进行修改提交,而是在通话与控制桌面过程中直接提出意见和如何进行修改添加,github的修改提交记录中只有后来一些没有影响的问题,没有能更好的体会到github的用途。

技术图片

技术图片

 

吴宇森同学提供代码,但是代码的功能不够全面,没有随机数的产生与随机产生四则运算,没有控制和与积不能超过一百,除法整除,和统计结果与得分功能。

①第一次互换身份

第一次由我来添加产生随机数和随机产生四则运算的代码,吴宇森同学负责通过桌面分享与语音通话进行审查。随机产生比较简单,只需添加随机函数就可以,所以这部分进行的比较顺利。

②第二次互换身份

吴宇森同学负责控制和与积不能超过一百,除法整除的问题,我负责审查。因为运算数是随机产生的0-100内的整数,并不知道哪一次产生的运算数符合要求,经过讨论,我们决定使用while循环来控制,和、积、求余作为循环条件,当和与积大于等于100且求余不等于0时,执行循环操作,直至产生符合条件的运算数,结果又return带回。

③第三次互换身份

由于课题要求差不能为负数且整除,所以在编写代码时就要考虑两运算数的大小。这一部分由我来完成,吴宇森同学进行审查。因为要判断大小,所以我们引用了max()与min()函数来取其中的最大值与最小值,结果赋值给运算数,完成了该模块的要求。

④第四次互换身份

此时代码功能基本可以实现,但是结果显示不够清晰直观。这一部分主要由吴宇森同学负责,我负责给出意见。在结尾的输出部分,添加了统计做对了几道题与做错了几道题,和统计最后得分的模块,这一部分比较简单,只需定义两个变量控制题数与做对的题目,由输出函数printf输出即可。

技术图片

 

(2)功能实现情况

   ①随机产生0-100的运算数:

1 ysf = [, , ×, ÷]
2     f = random.randint(0, 3)   #产生0-3的随机整数,随机产生加减乘除运算
3     n1 = random.randint(1, 100)
4     n2 = random.randint(1, 100)

   ②根据要求运算式的和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除),用以下代码实现该模块功能:

 1 if f == 0:  # 加法
 2         while n1 + n2 >=100: #控制和不超过100
 3           n1 = random.randint(1, 100)
 4           n2 = random.randint(1, 100)
 5         result = int(n1 + n2)
 6     elif f == 1:  # 减法
 7         n1, n2 = max(n1, n2), min(n1, n2)
 8         result = n1 - n2
 9     elif f == 2:  # 乘法
10         while n1 * n2 >=100:  #控制积不超过100
11             n1 = random.randint(1, 100)
12             n2 = random.randint(1, 100)
13         result = int(n1 * n2)
14     elif f == 3:  # 除法
15         n1, n2 = max(n1, n2), min(n1, n2)
16         while n1 % n2 != 0:
17             n1 = random.randint(1, 100)
18             n2 = random.randint(1, 100)
19             n1, n2 = max(n1, n2), min(n1, n2)
20         result = int(n1 / n2)
21     print(n1, ysf[f], n2, = , end=‘‘)
22     return result

③用户输入答案,系统判断正误以及运算完成后统计答题情况和所得分数:      

 1 m=0
 2 n=10 #输出运算式的个数
 3 while n>0:
 4         result = szys()
 5         j = input()
 6         s = int(j)
 7         if s == result:
 8             print(right)
 9             m = m + 1
10         else:
11             print(error.the answer is, result)
12         n=n-1
13 print(统计结果:,正确, m,道题目,,错误, 10-m,道题目。)
14 print(统计得分:,m*10,分。)

 

④系统运行结果:

技术图片

 

4、项目github地址(附图)

项目github地址:https://github.com/CL129/my-travel-plans.git

 

 技术图片

 

5、实验总结

(1)在老师给出课题的时候,我们组选择四则运算,并选择C语言为开发语言,但真正在编写代码的时候,发现使用C语言的话代码会很长,而且需要定义很多函数,还涉及到使用数据结构中的栈,内容比较复杂,编写起来比较麻烦,通过从网上搜索相关代码以及考虑各种因素,我们决定改用Python作为开发语言,因为Python语言编写代码简短并且容易理解,省事省力。通过这次实验,终于体会到了Python这种语言的实用性,并且激发了自己对该语言的兴趣,课后会查阅相关书籍,熟练对该语言的了解和使用方法。

(2)一开始对github这个平台不熟悉,感觉使用起来有些吃力,不过在上网搜索相关使用方法以及浏览老师给的资料后,慢慢的完成了此次实验,体会到了github这个托管平台的好用之处。做实验的时候一定要有耐心,不能着急,否则就会出现这样那样的错误。

 

结对编程 第二阶段

标签:下划线   矩形   self   判断   用户输入   其它   函数默认参数   put   博客   

原文地址:https://www.cnblogs.com/clwys/p/12586216.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!