第一次个人编程作业

发布时间:2022-07-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了第一次个人编程作业脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_126_0@https://gIThub.COM/CNllb/031902610

一、PSP表格

PSP2.1 PErsonal Software PRocess Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 70
· EstiMATE · 估计这个任务需要多少时间 400 540
Development 开发 180 220
· Analysis · 需求分析 (包括学习新技) 240 230
· Design Spec · 生成设计文档 50 40
· Design review · 设计复审 60 55
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 45
· Design · 具体设计 90 115
· Coding · 具体编码 500 480
· Code Review · 代码复审 60 30
· test · 测试(自我测试,修改代码,提交修改) 100 70
Reporting 报告
· Test Repor · 测试报告 30 40
· Size Measurement · 计算工作量 40 25
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 60
· 合计 1900 2020

二、计算模块接口

1、计算模块接口的设计与实现过程

1.1 算法:

1.1.1 核心算法:DFA

有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的有限自动机,DFA中不会有从同一状态出发的两条边标志有相同的符号;DFA算法的核心是建立了以敏感词为基础的许多敏感词树。

第一次个人编程作业

1.1.2 构建出的trie树其中的单例

sensi_word_trie_tree = {
'邪':{
	'孝':{
			'攵':{
				'end_flag':True
				},
			'end_falg':False
			},
	'end_flag':False
	}
}

1.1.3 实现思路:

  • 首先,将敏感词文件内容读出,构造敏感词的trie树
  • 然后,使用DFS找出所有形式的敏感词出现的组合
  • 最后,使用DFA算法进行搜索

1.2 类设计和函数设计

  • 在本次开发中,仅创建了一个File类,用于文件的各种操作
  • File里面的函数:
    • __init__:用于初始化,定义类中的各种变量
    • get_sensi_word:用于读敏感词文件,将敏感词读出
    • build_sensi_word_trie_tree:构建敏感词trie树
    • get_single_line_sensi_word:对敏感词进行单行测试
    • get_single_line_result:读入检测文本的内容,并得出检测结果数组
    • print_out:将结果以文件的形式读出
    • combine_function:对敏感词进行组合,得到组合的结果
    • DFS:深度优先搜索所有出现的敏感字的类型组合

2、计算模块接口部分的性能改进

2.1 Profiler性能分析图

  • 如以下图,get_single_line_sensi_word函数花费了较多的时间,在该函数中pychai进行拆字耗时较大,还想不出有什么更好的拆解方式,自己构造敏感词库耗时应该会降低一些些。

第一次个人编程作业

第一次个人编程作业

3、计算模块部分单元测试展示

  • 开始没想到单元测试这一茬,本次作业中基本使用类的全局变量,环环相扣,较难进行单元测试,单元测试没有完成到位,但每一步完成都有进行单行输出调试

  • 最终结果文件(打码打码):

    第一次个人编程作业

3.1 对combine_function进行单元测试,获得所有的笛卡尔积组合

def test_1(self):
    f = File()
    test_number = 2
    test_result = [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
    all_combine_result = f.combine_function(test_number)
    self.assertEqual(all_combine_result,test_result)

3.2 单元测试覆盖率

4、计算模块部分异常处理说明

  • 本次作业中,我们需要实现多次的文本读写工作,本人在编程的时候没有较规范进行单独出函数,直接在操作文件时添加进去了,不够单元测试有进行函数的测试
def test_2(self):
        lines = []
        try:
            with open("words.txt","r+",encoding="utf-8") as file:
                lines = file.readlines()
        except IOError:
            print("读写文件异常")
        else:
            print("get words!")
        print(lines)

第一次个人编程作业

三、心得

  • 本次作业应该是我学完python后做的第一个小作业,拿到题目的时候,不得不说,真的感觉算法挺难的,第一件事就是上搜索引擎和GitHub,咱就争取先做个GitHub的搬运工

  • 最先开始的时候,毫不犹豫选择了Java进行解题,相对会熟悉一些,但是看完题目要求,不能获取外部文件,这就很麻烦了,想要实现拆字和拼音,很需要做出一个自己的敏感词库,不行,还是转向python

  • 在设计算法的时候,想过几种算法,正则表达式或者暴力求解,这两种算法耗时会特别长。在同学的安利下,成功引入了DFA算法,兼顾使用pypinyin和pychar完成拆字和将汉字转化为拼音,再想方设法得出敏感词全部组合,最后放入DFA求解得出答案

  • 本次作业,我学会了如何更好的将手上的工具进行使用,学会了使用性能分析器,开始慢慢接受单元测试的方式进行代码检验

脚本宝典总结

以上是脚本宝典为你收集整理的第一次个人编程作业全部内容,希望文章能够帮你解决第一次个人编程作业所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。