结对编程
结对编程
结对同伴 | 蒲涛(201831081501) |
---|---|
github项目地址 | (https://github.com/putaotao/WordCount/tree/master) |
同伴作业地址 | (https://www.cnblogs.com/simple5960/p/11658401.html) |
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时 |
---|---|---|---|
Planning | 计划 | 2000 | 1860 |
·Estimate | 估计这个任务需要多少时间 | 2000 | 1860 |
Development | 开发 | 500 | 600 |
·Analysis | 需求分析 | 100 | 120 |
·Design Spec | 生成设计文档 | 50 | 30 |
·Design Review | 设计复审(和同事审核设计文档) | 20 | 40 |
·Coding Standard | 代码规范(为目前的开发制定合适的规范) | 20 | 40 |
·Design | 具体设计 | 70 | 60 |
·Coding | 具体编码 | 330 | 200 |
·Code Review | 代码复审 | 30 | 30 |
·Text | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
·Reporting | 报告 | 30 | 30 |
·Text Report | 测试报告 | 30 | 30 |
·Size Measurement | 计算工作量 | 30 | 30 |
·Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 30 | 30 |
· | 合计 | 1860 | 1860 |
计算接口与设计实现
功能分析
统计文件字符数英文字母和数字字母等,统计字符总数和有效行数,统计单词出现频数,输出排序后的字符。
解决方法
先创建一个列表统计行数,然后用字符串存取字符,再过滤掉可能出现的回车空行等无效的空白行和无效字符用word[]链表存储字符产dic{}统计有效字符,之后用rank链表进行排序,统计词频数最后输出。具体思路和实现过程在代码里有注释。
代码复审
本次结对编程是和同学一起完成,因为两个人想法不同,编码水平差异也大,并没有各编各的代码再合并到一起,而是一起商量着一起做的,在同伴那里学到了很多。
with open("content.txt", "r", encoding='UTF-8') as f:
# 方便读取行数
content = f.readlines()
f.seek(0, 0)
# 方便读取字符数
content1 = f.read()
# 过滤掉空白字符
r = list(filter(lambda x: x != "" and x != "\n", content))
# 过滤掉空白字符
r1 = content1.replace(" ", "").replace("\n", "")
length = len(r) # 有效行数
length1 = len(r1) # 有效字符数
print("行数为", length)
print("字符数为", length1)
word = []
# 去掉每行末尾的换行符,并且通过空格分割为单个字符串
for i in r:
if i.find("\n") != -1:
i = i.replace("\n", "")
word.extend(i.split(" "))
dic = {}
count = 0
# 过滤掉不合条件的字符串,并且将符合的字符串加入字典统计次数
for i in word:
if i.isalnum() and len(i) >= 4:
# 符号条件的字符串计数
count += 1
if i in dic:
dic[i] = dic[i] + 1
else:
dic[i] = 1
print("单词数为", count)
rank = []
for i in dic:
rank.append(dic[i])
rank = sorted(rank, reverse=True)
maxwords = []
flag = False
for i in rank:
if flag:
break
for j in dic:
if i == dic[j] and (j not in maxwords):
maxwords.append((j ,dic[j]))
# 数量足够就跳出多层循环
if len(maxwords) == 10 or len(maxwords) == len(dic):
flag = True
break
print(maxwords)
运行截图如下:
结对过程
心得与体会
目前就我自己以及室友的体会,一个人写代码的效率要比两个人的要高,首先是心理上嘛,大家都能偷懒就偷懒一起的时候就是推来推去,然后分开的话,别人写的代码,超过200行的基本是不太想看的(即便有注释),还有一个问题就是对需求的分析能力没有那么高,在对接之前给了这样的接口,可能到后面发现还需要其他的东西,导致中间修改有点麻烦,然后大家思考问题的角度不太一样然后交流也做的不够好,我这边符号用int型0 1 2 3代表,而他那边直接存char型+ - x /,也属于对接上的问题吧,总得来说吧,感觉这个结对编程是很有意义的,可以说是对后面团队编程的一个铺垫吧,现在遇到的问题可能到后面就会注意一点,然后自己也确实自学了不少东西。总得来说就是对需求的分析还要更全面一点,多多交流,分工合作,这样才能事半功倍,要不然就是事倍功半。我们的结对编程项目实现过程差不多就是这样,过程中遇到了各种各样的问题,尝试着一一解决,总体来说学到了很多很多。这次合作也是从队友那里学到了不少,合作还是十分愉快的,非常感谢队友对我的帮助!