项目地址:https://github.com/Anko233/wc/blob/master/wc.py
拿到题目后,发现这个作业需要打开文件,使用正则表达式匹配,接受命令行参数等操作,于是就有搜索引擎查找了许多有关这方面的内容.
整体设计思路是使用命令行参数进行for循环,再使用if-elif-else进行匹配,每个命令行参数的实现做成一个函数
实现了-a -c -l -w 的功能
-l 功能:只需要打开文件,然后使用 for循环读取文件,每读取一次计数器加一,就能得出结果
def line(f):#计算行数的函数 i = 0 for line in f: i += 1 print("Line number is ", i)
-c 功能:使用read()函数,再使用len()函数,即可读取字符数(我认为\n也算是一个字符)
def character(f):#计算字符数的函数 print("Character number is ", len(f.read()))
之前想过用正则表达式识别\n,但是后来发现代码中也可能包含\n,这样计数就会出现错误
-w 功能:使用正则表达式找出所有的词数,用findall()返回一个列表,再用len()计算数量
def word(f):#计算单词数的函数 w = re.compile("[a-z]+", re.I).findall(f.read()) print("Word number is ",len(w))
-a 基本思路是先判断是否为空行,再判断是否为单行注释,最后判断是否为注释块,都不是则为代码行,思路有些繁琐,而且对文件中有包含/*, */, //的字符串会出现识别错误
运行完一个函数后,文件对象指针指向末尾,应此要用符f.seek(0, 0)使其指向开头
测试:
空文件
单字符文件
单词文件
单行文件:this is a line of test4
标准文件test
已上传至github
经测试包含/**/类型的注释代码正则表达式匹配会出现问题
PSP表
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 |
5 |
· Estimate |
· 估计这个任务需要多少时间 |
10 |
5 |
Development |
开发 |
330 |
500 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
80 |
· Design Spec |
· 生成设计文档 |
0 |
0 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
0 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0 |
0 |
· Design |
· 具体设计 |
100 |
180 |
· Coding |
· 具体编码 |
120 |
180 |
· Code Review |
· 代码复审 |
20 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
30 |
Reporting |
报告 |
30 |
50 |
· Test Report |
· 测试报告 |
10 |
20 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 |
20 |
合计 |
|
370 |
555 |