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

基本功能列表:

  1. wordCounter.exe -c file.c //返回文件 file.c 的字符数
  2. wordCounter.exe -w file.c //返回文件 file.c 的词的数目
  3. 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,通过这次作业,我得到了很多宝贵的经验。

软工作业-wc(Python实现)的更多相关文章

  1. 软工作业-Wc

    Wc.exe wc.exe是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行 ...

  2. 软工作业-----Alpha版本第一周小结

            软工作业-----Alpha版本第一周小结   Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...

  3. [软工作业]-软件案例分析-CSDN

    [软工作业]-软件案例分析-CSDN(app) 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件案例分析 我在这个课程的目标是 ...

  4. BUAA2020软工作业——提问回顾与个人总结

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...

  5. 【软工作业&思考】关于软工的一些概念性理解暨第一次阅读作业

    概述 项目 内容 本次作业所属课程 2019BUAA软件工程 周二班 本次作业要求 第1次个人作业当然,比这个更重要百倍的还是实实在在的思考,这也是标题如此命名的原因 我在本课程的目标 在原有实践经验 ...

  6. 软工作业No.3--团队作业:甜美女孩出击!

    队名:甜美女孩 队员包括: 姓名 学号 身份 曾祎祺 3216005211 队长 邓画月 3216005212 队员 何颖琪 3216005213 队员 梁沛诗 3216005214 队员 梁子君 3 ...

  7. 软工作业No.1。Java实现WC.exe

    网址:https://github.com/a249970271/WC WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有w ...

  8. 软工作业1—java实现wc.exe

    github项目地址 https://github.com/liyizhu/wc.exe WC 项目要求 基本功能列表: wc.exe -c file.c     //返回文件 file.c 的字符数 ...

  9. 软工作业1:wc.exe项目开发(java)

    Github地址:https://github.com/Zzhaomin/learngit 项目相关要求 : wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...

随机推荐

  1. 查看Oracle的表中有哪些索引

    用user_indexes和user_ind_columns系统表查看已经存在的索引 对于系统中已经存在的索引我们可以通过以下的两个系统视图(user_indexes和user_ind_columns ...

  2. pc端用微信扫一扫实现微信第三方登陆

    官方文档链接 第一步:获取AppID  AppSecret (微信开发平台申请PC端微信登陆)   第二步:生成扫描二维码,获取code https://open.weixin.qq.com/conn ...

  3. linux进程内存到底怎么看 剖析top命令显示的VIRT RES SHR值

    引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控.收集进程的CPU.IO.内存使用情况.比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT).物理内存(RES). ...

  4. Authentication Overview

    Authentication Overview Service accounts User accounts API keys

  5. JS之DOM对象二

    前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele ...

  6. Java集合(9):ConcurrentHashMap

    一.ConcurrentHashMap介绍 我们可以在单线程时使用HashMap提高效率,而多线程时用Hashtable来保证安全.但是,HashMap中未进行同步考虑,而Hashtable则使用了s ...

  7. ORA-00911: 无效字符\n

    使用EXECUTE IMMEDIATE执行命令时命令字符串不能添加命令结束符";",否则会报此错

  8. Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

    最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders ...

  9. Linux下SSH中配置说明

    SSH 协议:安全外壳协议.为 Secure Shell 的缩写.SSH 为建立在应用层和传输层基础上的安全协议. sshd服务使用SSH协议可以用来进行远程控制,或在计算机之间传送文件.而实现此功能 ...

  10. 【hihocoder】01背包

    描述 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 小Ho现在手上有M张奖券,而奖品区有N件奖品,分别标号为1到N,其中第i件奖品需要ne ...