zoukankan      html  css  js  c++  java
  • 软件工程第二次作业

    这个作业属于哪个课程 软工-2018级计算机1班
    这个作业要求在哪里 202103226-1 编程作业
    这个作业的目标 使用Gitee、完成WordCount
    学号 20188380

    1、Gitee地址

    https://gitee.com/noacgnnolife/project-java

    2、设计思路

    1. 统计文件的字符数(对应输出第一行)
    • 只需要统计Ascii码,汉字不需考虑
    • 空格,水平制表符,换行符,均字符
    1. 统计文件的单词总数(对应输出第二行),单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写
    • 英文字母: A-Z,a-z
    • 字母数字符号:A-Z, a-z,0-9
    • 分割符:空格,非字母数字符号
    • :file123是一个单词, 123file不是一个单词。file,File和FILE是同一个单词

    我具体实现了的需求只有统计字符数、单词数。所有需求封装到一个file类中,每个需求再分别用方法再封装一次。这样就能实现简单的结构化。对于纯英文文本,直接用 len() 统计字符数;统计单词数需要将文本中的所有' , '和' . '替换成空格,然后再去除文本左右的空格,最后再右 split() 对文本做分割,分割符为空格,得到 list 数据类型的返回值,通过调用len()方法获得单词总数

    3、具体实现

        def __init__(self, filename):
            self.filename = filename
     	# 初始化变量filename
    
    # 打开文件并读取文件
        def file_open(self):
            # 上下文管理器,只读,用encoding对文本做转码处理,避免编码不一致
            f = open(self.filename, 'r',encoding='utf-8')
            src = f.read()
            return src
    
     # 计算字符数
        def file_count_chars(self):
            chars = self.file_open()
            count_chars = len(chars)
            return count_chars
    
     # 计算单词总数
        def file_count_words(self):
            chars = self.file_open()
            # 将逗号改为空格
            chars = chars.replace(',', ' ')
            chars = chars.replace('.',' ')
            # 除去左右空格
            chars = chars.strip()
            # 分割
            counts_words = chars.split(' ')
            result = len(counts_words)
            return result
    
    # 若作为主文件运行,则执行以下代码块
    if __name__ == '__main__':
    
        time_1 = default_timer()
        try:
            # 读取的文本
            a = file('哈利波特原版.txt')
            result_1 = a.file_count_chars()
            result_2 = a.file_count_words()
    
            print('目标文件字符数:',result_1)
            print('目标单词数:',result_2)
    
    
        except FileNotFoundError:
            print('目标文件:'+a.filename+'不存在,请重试!')
    

    4、性能测试

    测试的文本是在网上随便找的《哈利波特》英文版 全集,总大小6.29M

    性能测试我做了两种,第一种是嵌入在代码中的default_timer,default_timer()是 python 中精度最高的计时器,通过嵌在代码中的计时点之间的差值得到运行时间。

    第二种是通过引用外部包 cProfile 对代码做性能测试,cProfile相较default_timer而言内容更详细,它会把程序运行过程中的每段代码的运行时间都计算出来。

    5、心路历程

    因为做这次作业的时间有点靠后,离 deadline 也没有几小时了,所以就尽量用比较简单的方式完成了一些需求,其实统计有效行数和统计并显示10个出现次数最多的单词这两个需求也有思路,但是时间比较紧,精力也有点不足,所以就搁置了。总的来说这次作业其实并不难,需求都很常规。但是我使用的是Python编写的程序,与要求使用的 C 或 Java 编写程序的基本需求不相通,所以严格来讲这次作业等于我白写了。可是我认为这中间的思考和动手尝试的经验是比完成作业要更重要的东西,因此这也是我明知作业过不了也要熬夜DEBUG、写文档的理由。

    最后提一嘴,我感觉这PSP表格有点大题小做,我从开始思考到大体完成代码也就不过1小时左右,中间几乎都是一个人设计和找资料,就是一个很简单事情,但是表格却要我把一个人就能轻松做完的工作时间分这么细。有点不至于......

    6、PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划
    • Estimate • 估计这个任务需要多少时间 300 291
    Development 开发 150 75
    • Analysis • 需求分析 (包括学习新技术) 60 45
    • Design Spec • 生成设计文档 10 10
    • Design Review • 设计复审 20 10
    • Coding Standard • 代码规范 (为目前的开发制定合适的规范) 5 1
    • Design • 具体设计 50 45
    • Coding • 具体编码 25 25
    • Code Review • 代码复审 10 5
    • Test • 测试(自我测试,修改代码,提交修改) 30 30
    Reporting 报告 40 40
    • Test Repor • 测试报告 20 5
    • Size Measurement • 计算工作量
    • Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划
    合计 720 582
  • 相关阅读:
    HDU 3853:LOOPS(概率DP)
    HDU 4405:Aeroplane chess(概率DP入门)
    中国剩余定理模板
    HDU 5768:Lucky7(中国剩余定理 + 容斥原理)
    欧几里得和拓展欧几里得模板
    HDU 5025:Saving Tang Monk(BFS + 状压)
    HDU 1728:逃离迷宫(BFS)
    HDU 5795:A Simple Nim(博弈)
    HDU 5724:Chess(博弈 + 状压)
    HDU 5818:Joint Stacks(stack + deque)
  • 原文地址:https://www.cnblogs.com/noacgnnolife/p/14608960.html
Copyright © 2011-2022 走看看