# dmb250 **Repository Path**: wang-hao37/dmb250 ## Basic Information - **Project Name**: dmb250 - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-27 - **Last Updated**: 2026-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文本计数统计程序 ## 一、项目简介及其相关的用法 ### 1. 项目简介 本项目是一个基于 Python 3 的命令行文本计数统计程序,程序文件为 `wc.py`。 程序面向纯文本文件(`.txt`、`.c`、`.cpp`、`.py` 等),提供两类统计能力: 1. 基础功能:统计字符数、单词数、句子数; 2. 扩展功能:统计代码文件的总行数、空行数、注释行数、代码行数。 设计目标: - 命令格式与经典 Unix `wc` 命令保持一致(`程序 + 参数 + 文件名`); - 无第三方依赖,仅使用 Python 标准库 `sys`、`re`、`os`; - 函数与命令行入口分离,便于单元测试。 ### 2. 环境要求 - Python 3.7 及以上版本 - 操作系统:Windows / macOS / Linux 均可 ### 3.命令格式 python wc.py [参数] [文件名] 其中: [参数]:必须是下表中的一个选项; [文件名]:目标文本文件的路径,支持相对路径与绝对路径。 ### 4. 参数说明 | 参数 | 功能 | 类别 | |------|------|------| | `-c` | 统计字符数(含空格、换行符) | 基础功能 | | `-w` | 统计单词数(以字母/数字/撇号组成的序列为一个单词) | 基础功能 | | `-s` | 统计句子数(以 `.` `!` `?` 结尾的非空片段计一句) | 基础功能 | | `-l` | 统计文件总行数 | 扩展功能 | | `-b` | 统计空行数(仅含空白字符的行) | 扩展功能 | | `-m` | 统计注释行数(`//`、`/*`、`*` 开头的行) | 扩展功能 | | `-k` | 统计代码行数(总行数 − 空行数 − 注释行数) | 扩展功能 | ### 5. 使用示例 基础功能 python wc.py -c testdata/sample.txt python wc.py -w testdata/sample.txt python wc.py -s testdata/sample.txt 扩展功能 python wc.py -l testdata/sample.c python wc.py -b testdata/sample.c python wc.py -m testdata/sample.c python wc.py -k testdata/sample.c ### 6. 异常处理约定 | 情况 | 程序行为 | 退出码 | |------|---------|--------| | 参数个数不为 2 | 打印用法说明(Usage) | 1 | | 参数名不在支持列表 | 打印 `Unknown option: xxx` + 用法 | 1 | | 文件不存在或无法打开 | 打印 `Error: cannot open file 'xxx'` | 2 | | 正常统计 | 输出一个整数 | 0 | ## 二、文件列表及其相关说明 ### 1. 目录结构 wc-project/ ├── wc.py # 主程序 ├── test_wc.py # 单元测试 ├── testdata/ │ ├── sample.txt # 英文文本样例 │ └── sample.c # 代码文件样例 ├── screenshots/ # 运行截图目录 ├── README.md # 项目说明(本文件) └── .gitignore # Git 忽略配置 ### 2. 文件详细说明 | 文件/目录 | 类型 | 说明 | |-----------|------|------| | `wc.py` | Python 源码 | 程序入口。包含 7 个统计函数、命令行参数解析 `main()` 与 `USAGE` 用法说明。所有参数通过 `OPTION_MAP` 字典分发到对应函数。 | | `test_wc.py` | Python 源码 | 基于 `unittest` 框架的单元测试,共 10 个测试用例,覆盖基础功能、边界条件与扩展功能。测试通过 `tempfile` 创建临时文件,不依赖 `testdata/` 下的真实文件。 | | `testdata/sample.txt` | 文本数据 | 英文文本样例,含 4 个句子、多种标点(`.` `!` `?`),用于演示 `-c`、`-w`、`-s`。 | | `testdata/sample.c` | 代码数据 | 含 `//` 行注释、`/* ... */` 块注释(含 `*` 续行)、空行与代码行的 C 文件,用于演示 `-l`、`-b`、`-m`、`-k`。 | | `screenshots/` | 目录 | 存放程序运行结果与单元测试通过截图,供 README 与作业提交引用。 | | `README.md` | 文档 | 项目说明文档,含简介与用法、文件列表、例程运行结果三部分。 | | `.gitignore` | 配置 | 指定 Git 忽略规则,排除 `__pycache__/`、本地备份 `wc_full.py`、临时文件 `t.c` / `big.txt`、编辑器目录 `.vscode/` 等。 | ## 三、例程运行及其相关结果 ### 1. 基础功能运行结果 对 testdata/sample.txt 运行: ![输入图片说明](screenshot/shot_basic.png) 结果说明: 212:该文本共 190 个字符(含空格与换行符); 33:共 30 个单词; 4:共 4 个句子。 ### 2. 扩展功能运行结果 对 testdata/sample.c 运行: ![输入图片说明](screenshot/shot_perf.png) 结果说明: 21:文件共 21 行; 4:其中 34行为空行; 6:其中 6 行为注释行 11:其余 11行为代码行。 ### 3. 异常输入运行结果 ![输入图片说明](screenshot/shot_error.png) ![输入图片说明](screenshot/shot_error1.png) 异常场景均给出明确提示,并返回非零退出码。 ### 4.单元测试运行结果 ![输入图片说明](screenshot/shot_pass.png)