结对编程

结对编程

结对同伴 汪思朋(201831082129)
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)

运行效果:

不i会.jpg

结对过程

Cache_-5ab758befcc5806d..jpg

心得与体会

目前就我自己以及室友的体会,一个人写代码的效率要比两个人的要高,首先是心理上嘛,大家都能偷懒就偷懒一起的时候就是推来推去,然后分开的话,别人写的代码,超过200行的基本是不太想看的(即便有注释),还有一个问题就是对需求的分析能力没有那么高,在对接之前给了这样的接口,可能到后面发现还需要其他的东西,导致中间修改有点麻烦,然后大家思考问题的角度不太一样然后交流也做的不够好,我这边符号用int型0 1 2 3代表,而他那边直接存char型+ - x /,也属于对接上的问题吧,总得来说吧,感觉这个结对编程是很有意义的,可以说是对后面团队编程的一个铺垫吧,现在遇到的问题可能到后面就会注意一点,然后自己也确实自学了不少东西。总得来说就是对需求的分析还要更全面一点,多多交流,分工合作,这样才能事半功倍,要不然就是事倍功半。我们的结对编程项目实现过程差不多就是这样,过程中遇到了各种各样的问题,尝试着一一解决,总体来说学到了很多很多。这次合作也是从队友那里学到了不少,合作还是十分愉快的,非常感谢队友对我的帮助!

posted @ 2019-10-13 16:43  tao4867  阅读(133)  评论(0编辑  收藏  举报