---恢复内容开始---

1.Github项目地址:

https://github.com/zhg1998/ww/blob/master/wc.py

2.项目相关要求:

写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

具体功能要求:
程序处理用户需求的模式为:

wc.exe [parameter] [file_name]

基本功能列表:

wc.exe -c file.c     //返回文件 file.c 的字符数 (已实现)

wc.exe -w file.c    //返回文件 file.c 的词的数目  (已实现)

wc.exe -l file.c      //返回文件 file.c 的行数 (已实现)

扩展功能:
    -s   递归处理目录下符合条件的文件。
    -a   返回更复杂的数据(代码行 / 空行 / 注释行)。

空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

代码行:本行包括多于一个字符的代码。

注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

} //注释
在这种情况下,这一行属于注释行。

[file_name]: 文件或目录名,可以处理一般通配符。

高级功能:

-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

3.PSP表

PSP2.1

Personal Software Process Stages

预估耗时(小时)

实际耗时(小时)

Planning

计划

1

2

· Estimate

· 估计这个任务需要多少时间

50

60

Development

开发

32

40

· Analysis

· 需求分析 (包括学习新技术)

8

10

· Design Spec

· 生成设计文档

1

1.5

· Design Review

· 设计复审 (和同事审核设计文档)

0.5

0.5

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

1

1.5

· Design

· 具体设计

2

5

· Coding

· 具体编码

24

30

· Code Review

· 代码复审

2

2

· Test

· 测试(自我测试,修改代码,提交修改)

1

2

Reporting

报告

1

1

· Test Report

· 测试报告

1

1.5

· Size Measurement

· 计算工作量

0.5

0.5

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

1

1

合计

126

 158.5

4.解题思路

  拿到题目后,我认为用python写会比较的简便,以为实现wc的功能比较容易完成,只是我对python的了解比较浅,所以只实现了基础功能。由于是对字符数,词数,和行数的统计,需要先打开文件,然后用一个for循环和实现对字符数,行数和单词数的统计,其中我在单词数的统计中遇到了困难,经过思考后,我决定通过将空格替代掉代码行前后的非数字和字母后删去空格的方法以及使用正则表达实现了对单词数的统计,由于实现基础功能所消耗的时间较长,所以我没有做后续的扩展功能和高级功能。

5.设计实现过程

  通过main函数对文件的读取和输出对应指令的统计数值,调用了open()的方法打开文件和条件判断语句输出相应值,在read_file()中对三个基本功能的实现,调用了len()函数,line.strip()函数以及使用了正则表达式对单词统计功能的实现。

6.代码说明

1.三种基本功能的实现

2.主函数,打开文件以及输出对应指令的统计值。

7.测试运行

测试文件

测试结果

测试文件

测试结果

测试文件

测试结果

8.代码覆盖率

 9.项目小结

我是通过课余时间断断续续来进行python的学习的,也没怎么经过练习,所以用起来任然是比较生疏。看到作业后,我就想尝试一下用python去实现,虽然只实现了简单的基础功能,然而编写代码的过程还是遇到了不小的困难。从构思到编程,我还回书中和网上查找各函数的用法,也算是当做一次复习,不过也耗费了一些时间。这是我第一次列psp表以及写博客,在psp表中预估的时间和实际耗费的时间还是有些出入,这次作业让我初步体验到了软件工程开发的严谨以及规范性,同时我也发现了列psp表的好处,能更好的规划好时间。总的来说,这次作业的练习让我知道自己编程的能力还是较差以及对python的理解和用法还是较为生疏,同时应该在接下来的学习中更加努力来提高自己的能力。

---恢复内容结束---

通过python实现wc基本功能的更多相关文章

  1. Atitit php java python nodejs错误日志功能的比较

    Atitit php  java  python  nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...

  2. Python实现进度条功能

    Python实现进度条功能 import sys, time def progress(percent, width=50): # 设置进度条的宽度 if percent >= 100: # 当 ...

  3. 使用 python 实现 wc 命令程序的基本功能

    这里使用了 python 的基本代码实现了 Linux 系统下 wc 命令程序的基本功能. #!/usr/bin/env python #encoding: utf-8 # Author: liwei ...

  4. Python 实现WC功能

    GitHub仓库:https://github.com/15crmor/PAC 项目要求 基本要求 -c 统计文件字符数 (实现) -w 统计文件词数 (实现) -l 统计文件行数(实现) 扩展功能 ...

  5. Python模拟wc命令(软件测试第二次作业)

    Python实现字符,单词,行,代码行,空行及可视化 Gitee项目地址:https://gitee.com/biubiubiuLYQ/word_and_character_statistics 一. ...

  6. python实现简单爬虫功能

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

  7. Python:安装mssql模块功能,并实现与sqlserver连接、查询

    由于我系统是x64系统,所以下载python2.7 x64.下载地址:https://www.python.org/downloads/release/python-2712/, 经过测试发现这个版本 ...

  8. python10min系列之面试题解析:python实现tail -f功能

    同步发布在github上,跪求star 这篇文章最初是因为reboot的群里,有人去面试,笔试题有这个题,不知道怎么做,什么思路,就发群里大家讨论 我想了一下,简单说一下我的想法吧,当然,也有很好用的 ...

  9. Python实现脚本锁功能,同时只能执行一个脚本

    1. 文件锁 脚本启动前检查特定文件是否存在,不存在就启动并新建文件,脚本结束后删掉特定文件. 通过文件的判断来确定脚本是否正在执行. 方法实现也比较简单,这里以python脚本为例 #coding= ...

随机推荐

  1. eclipse 使用lombok 精简java bean

    前言:             lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码.特别是相对于 POJO             lombok 的官方网址 ...

  2. spring 的xml配置使用p标签简化

    1.常见配置 比如配置数据源 读取properties <!-- 配置阿里巴巴数据源 --> <bean id="dataSource" class=" ...

  3. IIS Manager 配置文件修该,允许跨域CORS访问

    IIS Manager 配置文件修该,允许跨域CORS访问 IIS Manager 的api访问会出现跨域问题,需要 IIS Manager的配置文件中修改. 配置文件的路径:C:\Program F ...

  4. python学习——练习题(13)

    """ 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个" ...

  5. bootstrap 自定义

    在ror工程内 /app/assets/stylesheets/bootstrap_and_overrides.css.less 内覆盖内容 具体参数如下 https://github.com/twb ...

  6. C++Primer笔记-----day01

    =======================================================day01======================================== ...

  7. Linux重置管理员密码

    对于一些非专业的Linux运维工程师或者偶尔使用Linux系统的学习者而言,比如我,经常会碰到忘记密码的尴尬,那这时候,快速的重置密码就相当重要了.废话不多说,今天我们就一起来学习一下如何快速重置密码 ...

  8. 使用C#通过Oracle.DataAccess连接Oracle,部署时需要注意版本问题

    平时我们开发使用的是32位的PC机,所以安装的也是Oracle32位的客户端.但是一般服务器都是64位的,安装的也是64位的Oracle客户端,如果要部署使用Oracle.DataAccess连接Or ...

  9. Notepad++ 多行一起编辑

      快捷方法: 鼠标:alt+滑鼠左鍵拖拉選取.鍵盤:alt+shift+方向鍵.

  10. android-tip-关于SpannableString的使用

    如果想单独设置TextView上其中几个字的样式,该怎么办? 答案是使用SpannableString. 使用SpannableString可以为TextView上的某字或某些字设置: 前景色(For ...