软工作业-wc(Python实现)
GitHub地址:GitHub
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 | 40 |
· Estimate |
· 估计这个任务需要多少时间 |
30 | 30 |
Development |
开发 |
240 | 300 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 | 55 |
· Design Spec |
· 生成设计文档 |
60 | 70 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
60 | 50 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
60 | 50 |
· Design |
· 具体设计 |
60 | 50 |
· Coding |
· 具体编码 |
60 | 90 |
· Code Review |
· 代码复审 |
60 | 120 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 | 100 |
Reporting |
报告 |
30 | 30 |
· Test Report |
· 测试报告 |
30 | 30 |
· Size Measurement |
· 计算工作量 |
30 | 30 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 | 30 |
合计 |
900 | 1075 |
基本功能列表:
- wordCounter.exe -c file.c //返回文件 file.c 的字符数
- wordCounter.exe -w file.c //返回文件 file.c 的词的数目
- wordCounter.exe -l file.c //返回文件 file.c 的行数
功能说明:
wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。
这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
解题思路:
最近在学习Python,刚好学过argparse模块,于是便用argparse模块来实现用命令行统计文本文件的字符数、单词数和行数。
一个主函数一个count函数,count函数用read()读取文本文件,再用len()计算字符数、split()算单词数、for-in遍历计算行数;
主函数调用count函数并输出结果。这就实现了一个非常简单的wc程序。
关键代码:
下面是刚学会不久的argparse模块:
#argparse模块,用于处理命令行参数
import argparse
parser = argparse.ArgumentParser(description="wc.exe")
parser.add_argument("-c",
dest="Chars",
help="count chars")
parser.add_argument("-w",
dest="Words",
help="count words")
parser.add_argument("-l",
dest="Lines",
help="count lines")
args = parser.parse_args()
下面是用于计算的get_Count()函数
i=0#全局变量,用于判断该返回哪个数
def get_Count(args):#用于计算出字符数、单词数和行数
global i
if i==1:
chars=0
with open(args,'r')as f:
data = f.read()
chars = len(data)
return chars#返回字符数
if i==2:
words=0
with open(args,'r')as f:
data = f.read()
words = len(data.split())
return words#返回单词数
if i==3:
lines=0
with open(args,'r')as f:
for Lines in f:
lines+=1
return lines#返回行数
下面是主函数,用于调用get_Count函数和输出结果
def main():#用于调用get_Count函数和输出结果
global i
if args.Chars:
i=1
c=get_Count(args.Chars)
print('文本的字符数:',c)
if args.Words:
i=2
w=get_Count(args.Words)
print('文本的词数:',w)
if args.Lines:
i=3
l=get_Count(args.Lines)
print('文本的行数:',l)
if __name__ == '__main__':
main()
测试运行:
1.空文件:
2.只有一个字符的文件:
3.只有一个词的文件:
4.只有一行的文件:
5.一个典型的源文件:
项目小结:
项目花费时间最多的是开发和修改代码,一开始写的代码错漏百出,经过不断的测试和修改才最终完成了这个程序。
由于以前没怎么注意写注释的问题(其实就是懒),这次也是借鉴了别人写的注释,才完成了属于自己代码的注释,以后坚持写注释养成好习惯。
当初因为Python的简洁而有了学习的想法,而这次作业则给了我这样一次锻炼自己的机会,同时,这也是我第一次写博客和第一次使用GitHub,通过这次作业,我得到了很多宝贵的经验。
最新文章
- Unity3D中可中途释放的单例
- shape 代码生成器
- (转)ASP.NET Mvc 2.0 - 1. Areas的创建与执行
- Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.
- jsp 微信公众平台 token验证(php、jsp)(转载)
- mtool安装
- js监听
- BZOJ 1048 分割矩阵
- linux查看cpu温度
- UVA 11080 - Place the Guards(二分图判定)
- 2620: [Usaco2012 Mar]Haybale Restacking
- ThreadLocal类分析
- eclipse没有联想功能的解决办法
- CNCC2017梳理
- protobuf java基础
- Latex 仅使用 hyperref 包中 \href 的方法
- mybatis源码-原来resultMap解析完是这样
- ID基本操作(复制页面)(移动页面)(调整跨页页数)(版面调整)5.16
- Oracle使用技巧及PL/SQL Developer配置
- K先生的博客
热门文章
- CAS单点登录原理解析(转载)
- python s12
- 筛选最新生成的报告——sort
- iOS 和服务端交互 数据加密策略
- [SHOI2013]发微博
- Java的Collection集合的常用方法
- [WPF+Prism]WPF个人集成平台
- MyEclipse安装aptana插件, 8.5之前版本 和 之后版本, MyEclipse10安装aptana
- 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)
- No toolchains found in the NDK toolchains folder for ABI with prefix