zoukankan      html  css  js  c++  java
  • 计算机与软件工程 作业四

    这个作业要求在哪里 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10534
    我在这个课程的目标是 学习软件工程,提高编程能力
    此作业在哪个具体方面帮我实现目标 锻炼编程能力,增强合作精神
    作业正文 https://www.cnblogs.com/zhou1231/p/12636576.html

    作业一

    每个人针对之前两次作业所写的代码,针对要求,并按照代码规范(风格规范、设计规范)要求评判其他学生的程序,同时进行代码复审(按照代码复审核表 https://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html),要求评价数目不少于8人次,
    评价内容直接放在你被评价的作业后面评论中
    同时另建立一个博客,将你作的评论的截图或者链接,放在博客中,并在你的博客中谈谈自己的总体看法








    总结

    大家的代码还是比较规范的,但还是有些细节需要改进,需要注意缩进为四个空格,大括号要独占一行,代码中也应该在必要的位置添加注释,方便其他人理解。我们在代码复审阶段既可以发现别人的优点和不足,也可以意识到自己的代码在哪里还有些不足。

    作业二

    两人自由组队进行结对编程
    参考结对编程的方法、过程(https://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html)开展两人合作完成本项目
    实现一个简单而完整的软件工具(中文文本文件人物统计程序):针对小说《红楼梦》要求能分析得出各个人物在每一个章回中各自出现的次数,将这些统计结果能写入到一个csv格式的文件。
    进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。
    进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。
    使用源代码管理系统 (GitHub, Gitee, Coding.net, 等);
    针对上述形成的软件程序,对于新的文本小说《水浒传》分析各个章节人物出现次数,来考察代码。
    将上述程序开发结对编程过程记录到新的博客中,尤其是需要通过各种形式展现结对编程过程,并将程序获得的《红楼梦》与《水浒传》各个章节人物出现次数与全本人物出现总次数,通过柱状图、饼图、表格等形式展现。

    同伴地址:https://www.cnblogs.com/cdinzz/p/12637127.html

    PSP Personal Software Process Stages 预估耗时 实际耗时
    Planning 计划 1天 5小时
    Estimate 估计这个任务需要多少时间 2周 2周
    Development 开发 1周 2周
    Analysis 需求分析(包括学习新技术) 5天 5天
    Coding Standard 代码规范 1小时 1小时
    Design 具体设计 3天 4天
    Coding 具体编码 5天 1周
    Code Review 代码复审 3小时 5小时
    Test 测试 1小时 2小时
    Reporting 报告 2小时 3小时
    Size Measurement 计算工作量 1小时 1小时
    Postmortem&Process Improvement Plan 事后总结,并提出过程改进计划 1小时 半小时

    代码

    
    import jieba
    excludes = {"什么","一个","我们","那里","你们","如今","说道","知道","起来","姑娘","这里","出来","他们","众人","自己",
                "一面","只见","怎么","奶奶","两个","没有","不是","不知","这个","听见","这样","进来","咱们","告诉","就是",
                "东西","袭人","回来","只是","大家","只得","老爷","丫头","这些","不敢","出去","所以","不过","的话","不好",
                "姐姐","探春","鸳鸯","一时","不能","过来","心里","如此","今日","银子","几个","答应","二人","还有","只管",
                "这么","说话","一回","那边","这话","外头","打发","自然","今儿","罢了","屋里","那些","听说","小丫头","不用","如何"}
    '''
    这些是一些干扰词汇,先列出,之后把这些词删除
    '''
    txt = open("红楼梦.txt","r",encoding='utf-8').read()
    '''
    不写明路径的话,默认和保存的python文件在同一目录下 注意打开格式是utf-8,这个可以打开txt文件,选择另存为,注意界面右下角的格式
    '''
    words = jieba.lcut(txt)
    '''
    利用jieba库将红楼梦的所有语句分成词汇
    '''
    counts = {}
    '''
    创建的一个空的字典
    '''
    for word in words:
        if len(word) == 1:      #如果长度是一,可能是语气词之类的,应该删除掉
            continue
        else:         counts[word] = counts.get(word,0) + 1
        '''
        如果字典中没有这个健(名字)则创建,如果有这个健那么就给他的计数加一
        [姓名:数量],这里是数量加一
        '''
    for word in excludes:			
        del(counts[word])
        '''
        #这一步:如果列出的干扰词汇在分完词后的所有词汇中那么删除
        '''
    items = list(counts.items())
    '''
    把保存[姓名:个数]的字典转换成列表
    '''
    items.sort(key=lambda x:x[1],reverse = True)
    '''
    对上述列表进行排序,'True'是降序排列
    '''
    for i in range(10):
        word,count = items[i]
        print("{0:<10}{1:>5}".format(word,count)) 
    '''
    这里是打印前十个
    因为列表也是[姓名:个数]
    word就是保存姓名的变量
    count就是保存个数的变量
    '''
    

    import jieba
    from collections import Counter
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    class HlmNameCount():
        # 此函数用于绘制条形图
        def showNameBar(self,name_list_sort,name_list_count):
            # x代表条形数量
            x = np.arange(len(name_list_sort))
            # 处理中文乱码
            plt.rcParams['font.sans-serif'] = ['SimHei']
            # 绘制条形图,bars相当于句柄
            bars = plt.bar(x,name_list_count)
            # 给各条形打上标签
            plt.xticks(x,name_list_sort)
            # 显示各条形具体数量
            i = 0
            for bar in bars:
                plt.text((bar.get_x() + bar.get_width() / 2), bar.get_height(), '%d' % name_list_count[i], ha='center', va='bottom')
                i += 1
            # 显示图形
            plt.show()
    
        # 此函数用于绘制饼状图
        def showNamePie(self, name_list_sort, name_list_fracs):
            # 处理中文乱码
            plt.rcParams['font.sans-serif'] = ['SimHei']
            # 绘制饼状图
            plt.pie(name_list_fracs, labels=name_list_sort, autopct='%1.2f%%', shadow=True)
            # 显示图形
            plt.show()
    
        def getNameTimesSort(self,name_list,txt_path):
            # 将所有人名临时添加到jieba所用字典,以使jieba能识别所有人名
            for k in name_list:
                jieba.add_word(k)
            # 打开并读取txt文件
            file_obj = open(txt_path, 'rb').read()
            # jieba分词
            jieba_cut = jieba.cut(file_obj)
            # Counter重新组装以方便读取
            book_counter = Counter(jieba_cut)
            # 人名列表,因为要处理凤姐所以不直接用name_list
            name_dict ={}
            # 人名出现的总次数,用于后边计算百分比
            name_total_count = 0
            for k in name_list:
                if k == '熙凤':
                    # 将熙凤出现的次数合并到凤姐
                    name_dict['凤姐'] += book_counter[k]
                else:
                    name_dict[k] = book_counter[k]
                name_total_count += book_counter[k]
            # Counter重新组装以使用most_common排序
            name_counter = Counter(name_dict)
            # 按出现次数排序后的人名列表
            name_list_sort = []
            # 按出现次数排序后的人名百分比列表
            name_list_fracs = []
            # 按出现次数排序后的人名次数列表
            name_list_count = []
            for k,v in name_counter.most_common():
                name_list_sort.append(k)
                name_list_fracs.append(round(v/name_total_count,2)*100)
                name_list_count.append(v)
                # print(k+':'+str(v))
            # 绘制条形图
            self.showNameBar(name_list_sort, name_list_count)
            # 绘制饼状图
            self.showNamePie(name_list_sort,name_list_fracs)
            
    
    if __name__ == '__main__':
        # 参与统计的人名列表,可修改成自己想要的列表
        name_list = ['宝玉', '黛玉', '宝钗',  '凤姐',  '贾母','贾琏',  '平儿','王夫人','太太','老太太' ]
        # 红楼梦txt文件所在路径,修改成自己文件所在路径
        txt_path = 'C:/Users/zyd/Desktop/红楼梦.txt'
        hnc = HlmNameCount()
        hnc.getNameTimesSort(name_list,txt_path)
    


    总结

    这次的代码是用python写的,对于python我们还不是很熟悉,第一次使用遇到的问题还是挺多的。运行时显示ModuleNotFoundError: No module named 'matplotlib',同时按wins+r 进入命令行,输入python -m pip install matplotlib 安装matplotlib模块即可。代码中路径的杠是/。运行时显示SyntaxError: multiple statements found while compiling a single statement,Ctrl+N,新建一个,这时直接将代码复制进来,就不会产生这个问题了。

  • 相关阅读:
    WSDL格式
    eclipse修改文件编码
    eclipse代码格式化设置
    批量修改Java类文件中引入的package包路径
    Oracle 创建用户
    电脑端口介绍
    Python Web 性能和压力测试 multi-mechanize
    C++使用ocilib访问oracle数据库
    IPython使用学习笔记
    .NET Core与.NET Framework、Mono之间的关系
  • 原文地址:https://www.cnblogs.com/zhou1231/p/12636576.html
Copyright © 2011-2022 走看看