陈志侠第二次作业

news/2025/1/21 16:32:50/文章来源:https://www.cnblogs.com/chenzhixia/p/18512754
这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc
这个作业的目标 编写实现命令行计数统计文本程序
姓名-学号 陈志侠 2022329301009
码云地址 https://gitee.com/chen-zhixia666/second-assignment

一、项目简介及其相关的用法

1.1项目简介

本项目旨在利用PyCharm实现一个命令行文本计数统计程序,能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。在拓展功能中,实现了统计代码行、空行、注释行、标点符号数、特定单词数等功能,用户可以通过命令行参数选择不同的统计功能,并指定要处理的文本文件。

1.2相关用法

具体命令行界面要求举例:
命令模式: wc.exe [参数] [文件名]

  • wc.exe -c file.txt 统计字符数
  • wc.exe -w file.txt 统计单词数
    扩展功能(加分项):统计代码行、空行、注释行等,并提供相应命令接口。

二、文件列表及其相关说明

2.1文件列表


不同版本号体现各个版本更迭

v0.1 空项目
v0.2 项目完成基础功能
v0.3 项目完成扩展功能(加分项)
点击查看v0.2代码
import sys
import redef count_characters(text):return len(text) #字符数def count_words(text):words = text.split()return len(words)   #单词数,以空格分割def count_sentences(text):sentences = re.split(r'[.!?]', text)return len([s for s in sentences if s])   #句子数,以‘.’、‘!’、‘?’作为句子结束标志def main():if len(sys.argv) != 3:  #检查命令行参数的数量是否正确print("笨蛋,正确用法是: python v0.2.py -c或-w或-s txt文件名")print("不同选择的意思是: -c (字符数), -w (单词数), -s (句子数)")sys.exit(1)option = sys.argv[1]filename = sys.argv[2]try:with open(filename, 'r') as file:text = file.read()except FileNotFoundError:  #如果文件不存在print(f"错误!!!!!这个文件居然不存在!!!")sys.exit(1)if option == "-c":num_characters = count_characters(text)print(f"字符数: {num_characters}")elif option == "-w":num_words = count_words(text)print(f"单词数: {num_words}")elif option == "-s":num_sentences = count_sentences(text)print(f"句子数: {num_sentences}")else:print("你的选择出错了,请使用-c或-w或-s")sys.exit(1)if __name__ == "__main__":main()
点击查看v0.3代码
import sys
import redef count_characters(text):return len(text) #字符数def count_words(text):words = text.split()return len(words)   #单词数,以空格分割def count_sentences(text):sentences = re.split(r'[.!?]', text)return len([s for s in sentences if s])   #句子数,以‘.’、‘!’、‘?’作为句子结束标志def count_lines(text):return len(text.split('\n'))  #代码行数,用换行符进行分割def count_empty_lines(text):return len([line for line in text.split('\n') if not line.strip()])   #空行数,过滤掉非空行def count_comment_lines(text):return len([line for line in text.split('\n') if line.strip().startswith('#')]) #注释行数,以‘#’开头def count_punctuation(text):punctuation = re.findall(r'[.,;:?!-]', text)return len(punctuation)  #标点符号数def count_specific_word(text, word):words = re.findall(r'\b{}\b'.format(re.escape(word)), text)return len(words)  #特定单词数def main():if len(sys.argv) < 3 or len(sys.argv) > 4:  #检查命令行参数的数量是否正确print("笨蛋,正确用法是: python v0.3.py -c或-w或-s或-e或-m或-a或-p txt文件名")print("不同选择的意思是: -c (字符数), -w (单词数), -s (句子数),-e(代码行数),-m(空行数),-a(注释行数),-p(标点符号数)")print("当你想要统计特定单词的出现数时,用法是:python v0.3.py -x txt文件名 [特定单词]")sys.exit(1)option = sys.argv[1]filename = sys.argv[2]specific_word = sys.argv[3] if len(sys.argv) == 4 else None  #获得特定单词(如果有)try:with open(filename, 'r') as file:text = file.read()except FileNotFoundError:  #如果文件不存在print(f"错误!!!!!这个文件居然不存在!!!")sys.exit(1)if option == "-c":num_characters = count_characters(text)print(f"字符数: {num_characters}")elif option == "-w":num_words = count_words(text)print(f"单词数: {num_words}")elif option == "-s":num_sentences = count_sentences(text)print(f"句子数: {num_sentences}")elif option == "-e":num_lines = count_lines(text)print(f"代码行数: {num_lines}")elif option == "-m":num_empty_lines = count_empty_lines(text)print(f"空行数: {num_empty_lines}")elif option == "-a":num_comment_lines = count_comment_lines(text)print(f"注释行数: {num_comment_lines}")elif option == "-p":num_punctuation = count_punctuation(text)print(f"标点符号数: {num_punctuation}")elif option == "-x":if specific_word is None:print("拜托,告诉我你想统计什么单词好吗")sys.exit(1)num_specific_word = count_specific_word(text, specific_word)print(f"'{specific_word}' 出现的次数: {num_specific_word}")else:print("你的选择出错了,请使用-c或-w或-s或-e或-m或-a或-p或-x")sys.exit(1)if __name__ == "__main__":main()

2.2程序说明

2.2.1函数说明

(1) count_characters(text):

  • 功能: 计算并返回文本中的字符数。
  • 参数: text (str): 输入的文本字符串。
  • 返回值: 整数,表示字符数。

(2) count_specific_word(text, word):

  • 功能: 计算并返回文本中特定单词的出现次数。单词匹配是区分大小写的,并且要求整个单词匹配(即不是部分匹配)。
  • 参数:
    • text (str): 输入的文本字符串。
    • word (str): 要统计的特定单词。
  • 返回值: 整数,表示特定单词出现的次数。

其他count函数功能类似,在此不一一阐述。
(3)main():

  • 功能: 主函数,处理命令行参数(-c、-w、-s、-e等)并调用相应的统计函数。
  • 参数: 无直接参数,但通过命令行传递。
  • 返回值: 无直接返回值,但会打印统计结果或错误信息。

2.2.2参数说明

  • -c: 统计字符数。
  • -w: 统计单词数。
  • -s: 统计句子数。
  • -e: 统计代码行数。
  • -m : 统计空行数。
  • -a : 统计注释行数。
  • -p : 统计标点符号数。
  • -x : 统计特定单词的出现次数。

三、例程运行及其相关结果

3.1.例程准备

在运行前准备好纯英文txt文件,使其满足具有字符、句子、注释行的要求。

3.2例程运行流程

  1. 检查命令行参数

    • 程序首先检查命令行参数的数量是否正确(3个或4个)。
    • 如果参数数量不正确,会打印错误信息并退出。
  2. 读取文件内容

    • 根据用户提供的文件名,尝试打开并读取文件内容。
    • 如果文件不存在,会打印错误信息并退出。
  3. 根据选项执行相应的统计函数

    • 根据用户选择的选项(如 -c-w-s 等),调用相应的统计函数。
    • 每个统计函数都会处理文件内容并返回结果。
  4. 输出结果

    • 将统计结果打印到控制台。

3.3运行结果

3.3.1 v0.2.py运行结果

3.3.2 v0.3.py运行结果


四、总结

4.1 收获

  • 掌握了字符串处理方法和正则表达式的应用。
  • 学会了如何处理命令行参数。
  • 提升了代码的组织和调试能力。

4.2 改进空间

  • 可以增加更多的统计功能,如统计不同类型单词的数量等。
  • 可以优化性能,特别是对于大文件的处理。
  • 可以添加更多的错误处理机制,以提高程序的健壮性。

通过本次实验,让我对python这个软件更加深入了解了,并且在其中收获快乐,这是一次非常棒的体验:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823647.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows平台有哪些好用的屏幕取词翻译工具

windows平台好用的屏幕取词翻译工具:1. 深度翻译(DeepL);2. 划词翻译(Capture2Text);3. 谷歌翻译(Google Translate);4. 考拉翻译(有道词典);5. 欧路词典(eudic);6. 轻译(QTranslate)。深度翻译是一款强大的翻译工具,不仅支持文本翻译,还能通过屏幕取词实现…

在C语言中进行网络编程时,有哪些辅助工具可用

标题:在C语言中进行网络编程时,有哪些辅助工具可用? 在C语言中进行网络编程时,可用的辅助工具包括套接字库(如Winsock、BSD Sockets)、协议库(如OpenSSL)、网络调试工具(如Wireshark)、以及集成开发环境(如Eclipse、Visual Studio)。这些工具为开发者提供了强大的支…

Go语言能否替代php做互联网网站开发

在互联网网站开发领域,Go语言具备了替代PHP的潜力。Go语言(也称为Golang)被设计为一种静态类型、编译语言,其出色的并发处理能力、简洁的语法、以及高效的性能表现,使其在开发大规模分布式系统时表现卓越。而PHP作为一种动态类型的解释语言,在网页脚本开发领域占据着重要…

实时语音转写技术:思通数科AI多模态平台赋能法庭审理,为庭审记录带来新体验

一、系统介绍 系统具备强大的特征提取和语音处理能力,利用美尔频谱系数(MFCCs)等算法进行高精度声学建模,并结合语言模型确保转写内容的上下文完整性。支持多语种识别、讲话人辨识、实时记录等功能,为多语言法庭环境及国际化庭审提供技术支持。平台还结合了Bert算法进行特…

为什么要异步复位,同步释放?

结论: 防止复位信号撤除时,因为违反recovery和removal产生亚稳态事件; 接下来是详细解释: 异步复位的弊端: 异步复位中最严重的问题是,如果异步复位信号在触发器时钟有效沿附近“释放”(复位信号从有效变为无效)的话,可能会导致触发器输出的亚稳态。异步复位信号释放(…

2级同步引发的思考

1. 2级同步的第二拍亚稳态出现概率非常小,但是也有可能出现,这一点对于从慢到快和从快到慢都是一样的;如果认为第二拍亚稳态不会出现的话,从慢到快从功能上,一定可以采到正确的值;从快到慢从功能上,不一定可以采到正确的值; 电路如下所示: 时序如下所示: 情况1和情…

thinkphp5如何获取请求过来的网址

​为了掌握如何在thinkphp5中获取请求的网址,本文将介绍以下几个关键步骤:1.了解请求对象的基础;2.使用url方法获取完整URL;3.获取URL中的各个组成部分;4.使用场景:重定向与获取上一个页面的URL;5.处理请求对象中的安全性问题。在使用thinkphp5进行开发时,对请求的处理…

【学习笔记】dp 优化

单调栈 & 单调队列 没啥好说的。放两道题目。 线段树优化 dp 例题 CF115E Linear Kingdom Races 容易想到记 \(f_{i,j}\) 表示前 \(i\) 个跑道,\([i-j+1,i]\) 全部修好的最大利润,但不好优化。考虑转化为表示 \([j,i]\) 全部修好的最大利润。最简单的状态转移方程: \[f_…

DBeaver如何连接impala

DBeaver下载地址:https://dbeaver.io/download/ 1、打开DBeaver,搜impala 2、下载impala驱动,然后解压ClouderaImpalaJDBC-2.6.34.10651)impala驱动下载地址:https://www.cloudera.com/downloads/connectors/impala/jdbc 2)进到ClouderaImpalaJDBC-2.6.34.1065,解压Clou…

什么是多接入边缘计算(MEC)?

多接入边缘计算(MEC)是一个新兴的技术范式,旨在将计算资源和能力从中心化数据中心移至网络的边缘,使其更接近数据源和终端用户。MEC的核心概念是为终端用户提供低延迟、高带宽和实时处理的应用和服务。与传统的云计算相比,MEC可以更有效地满足现代IoT、5G和实时应用的需求…

重工业数字化转型创新实践:某国家特大型钢铁企业如何快速落地基于实时数仓的数据分析平台

本期案例便将聚焦于某国家特大型钢铁企业的数字化创新实践,有效解决跨部门协作不畅、信息孤岛、决策效率低等问题使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC + 流处理 + 数据集…

阿里云消息团队创新论文被软件工程顶会 FM 2024 录用

近日,由阿里云消息队列团队发表的关于 RocketMQ 锁性能优化论文被 CCF-A 类软件工程顶级会议 FM 2024 录用。近日,由阿里云消息队列团队发表的关于 RocketMQ 锁性能优化论文被 CCF-A 类软件工程顶级会议 FM 2024 录用。FM 2024 是由欧洲形式化方法协会(FME)组织的第 24 届国…