陈彦吉的第二次作业

news/2025/1/27 12:56:50/文章来源:https://www.cnblogs.com/BlueSky295/p/18493767
这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc
这个作业的目标 实现一个命令行文本计数统计程序,能正确统计导入的txt文本中的字符数,单词数等数据
姓名-学号 陈彦吉 2022329301139

作业码云地址: https://gitee.com/BlueSky295/STFB


第二次作业感悟

这学期正好在上吕欣欣老师的Python程序设计课(强烈推荐欣欣姐的Python课!!!),于是趁热打铁使用Python进行全流程开发,同时也能巩固一下自己的Python知识。
由于是第一次使用Gitee(之前完全没接触过),正所谓万事开头难,在网站上找了很多关于Gitee+VS Code的配置教程来看,总算是摸清了一点点Gitee的基本使用机制了,在这里吹一下VS Code,实在是太好用了,不过最后的Perfomance Test还是借助了PyCharm Professitonal的Profile工具,说明这俩IDE也算是各有千秋吧。
通过这次作业还是学习到了不少新鲜的知识和技能,虽然过程也很痛苦就是了😭,不过总而言之还是很庆幸能够顺利完成这个小项目的开发。😊

README

项目简介

这是一个能够实现命令行文本计数统计的python程序项目。

  1. 基础功能:能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。
  2. 扩展功能:能正确统计导入的程序文件(支持python、C、C++、Java、Javascript多种语言)中的代码行、空行、注释行等,并提供相应命令接口。

文件列表说明

├───v0.1 							# 空项目
│   │   
│   └─── v0.1.py
│               
├───v0.2 							# 项目完成基础功能
│   │   SONG.txt 					# 测试文件
│   │   v0.2.py						# 主程序
│   │   基础功能测试结果.png
│   │   记事本计算结果比对.png
│   │   异常捕获.png
│   │ 
│   └───v0.2单元测试                 # 单元测试
│           v0.2基本功能测试.md     
│           
│           
├───v0.3 							# 项目完成扩展功能
│   │   Test.py 					# 测试文件
│   │   v0.3.py	 					# 主程序 
│   │   扩展功能测试结果.png
│   │   VS Code Counter计算结果比对.png
│   │   异常捕获.png
│   │   
│   └───v0.3单元测试
│            v0.3扩展功能测试.md
│           
│           
├───Performance Test				# 性能分析
│   ├───v0.2PerformanceTest         # v0.2项目Performance Test结果
│   │       v0.2Statistics
│   │       v0.2Call Graph
│   │       v0.2PerformanceTest.pstat
│   │      
│   └───v0.3PerformanceTest         # v0.3项目Performance Test结果
│           v0.Statistics
│           v0.3Call Graph
│           v0.3PerformanceTest.pstat 

使用方法说明

基础功能指令表
python v0.x.py -c file.txt # 统计字符数
python v0.x.py -w file.txt # 统计单词数
python v0.x.py -l file.txt # 统计句子数

其中v0.x对应的版本号为v0.2和v0.3

扩展功能指令表
python v0.3.py -C [程序文件名] # 统计程序文件代码行数
python v0.3.py -E [程序文件名] # 统计程序文件空行数
python v0.3.py -M [程序文件名] # 统计程序文件注释行数 

基础功能展示
  • 作为测试用的SONG.txt文本展示如下(以下片段节选自英国诗人William Blake的 Poetical Sketches
When early morn walks forth in sober grey;
Then to my black ey'd maid I haste away,
When evening sits beneath her dusky bow'r,
And gently sighs away the silent hour;
The village bell alarms, away I go;
And the vale darkens at my pensive woe.To that sweet village, where my black ey'd maid
Doth drop a tear beneath the silent shade,
I turn my eyes; and, pensive as I go,
Curse my black stars, and bless my pleasing woe.Oft when the summer sleeps among the trees,
Whisp'ring faint murmurs to the scanty breeze,
I walk the village round; if at her side
A youth doth walk in stolen joy and pride,
I curse my stars in bitter grief and woe,
That made my love so high, and me so low.O should she e'er prove false, his limbs I'd tear,
And throw all pity on the burning air;
I'd curse bright fortune for my mixed lot,
And then I'd die in peace, and be forgot.
  • Input:
python v0.2.py -c SONG.txt
python v0.2.py -w SONG.txt
python v0.2.py -l SONG.txt
  • Output:
William Blake诗歌中的字符数: 857
William Blake诗歌中的单词数: 176
William Blake诗歌中的句子数: 5
  • 结果比对

做作业时偶然发现记事本具有计数功能(左下角实时显示),虽然只能计算字符数,但也刚好可以用来检验v0.2项目中v0.2.py程序的正确性

基础功能测试结果

输入图片说明


扩展功能展示
  • 作为测试用的Test.py程序文件展示如下(文件夹中翻出来的,不记得来源了💦💦💦)
import pandas as pd
import pulp as pp
from tqdm import tqdmdata_path = 'sc60.csv'try:hourly_prediction = pd.read_csv(data_path, encoding='GBK')print("Data loaded successfully using GBK encoding.")
except Exception as e:print("Failed to read the CSV file with GBK encoding:", e)try:hourly_prediction = pd.read_csv(data_path, encoding='utf-8-sig')print("Data loaded successfully using utf-8-sig encoding.")except Exception as e:print("Failed to read the CSV file with utf-8-sig encoding:", e)# 设置列名和日期处理
hourly_prediction.columns = ['分拣中心', '日期', '班次', '预测货量']
hourly_prediction['日期'] = pd.to_datetime(hourly_prediction['日期'])# 仅对分拣中心SC60的数据进行操作
sc60_data = hourly_prediction[hourly_prediction['分拣中心'] == 'SC60']def solve_optimization(center, shifts_data):# 创建优化问题mylp = pp.LpProblem("Staffing Optimization", pp.LpMinimize)# 获取日期范围和班次dates = sorted(shifts_data['日期'].unique())shifts = shifts_data['班次'].unique()# 定义决策变量x = {(shift, date): pp.LpVariable(f"正式工_{shift}_{date.strftime('%Y%m%d')}", lowBound=0, cat="Integer")for date in dates for shift in shifts}y = {(shift, date): pp.LpVariable(f"临时工_{shift}_{date.strftime('%Y%m%d')}", lowBound=0, cat="Integer")for date in dates for shift in shifts}# 最小化总员工数mylp += pp.lpSum(x[shift, date] + y[shift, date] for shift in shifts for date in dates)# 满足需求的约束for date in dates:for shift in shifts:demand = shifts_data.loc[(shifts_data['日期'] == date) & (shifts_data['班次'] == shift), '预测货量'].item()mylp += 25 * x[shift, date] + 20 * y[shift, date] >= demand# 正式工总数约束mylp += pp.lpSum(x[shift, date] for shift in shifts for date in dates) <= 200# 求解问题mylp.solve(pp.PULP_CBC_CMD(msg=True))# 收集结果results = [{'分拣中心': center,'日期': date.strftime('%Y-%m-%d'),'班次': shift,'正式工人数': pp.value(x[shift, date]),'临时工人数': pp.value(y[shift, date])} for date in dates for shift in shifts]return results# 对SC60分拣中心应用优化
results = []
for date in tqdm(sorted(sc60_data['日期'].unique()), desc="Optimizing SC60"):date_data = sc60_data[sc60_data['日期'] == date]results.extend(solve_optimization('SC60', date_data))# 将结果列表保存
results_df = pd.DataFrame(results)
results_df.to_csv('optimized_staff_schedule_SC60.csv', index=False)
print("Optimization complete for SC60. Results saved to 'optimized_staff_schedule_SC60.csv'.")
  • Input:
python v0.3.py -C Test.py
python v0.3.py -E Test.py 
python v0.3.py -M Test.py  
  • Output
代码行数: 47
空行数: 14
注释行数: 12
  • 结果比对

VS Code中有个名为VS Code Counter的扩展工具,用于统计代码行数以及代码量等信息,正好可以用来检验我们v0.3.py程序的准确性。

扩展功能测试结果

VS Code Counter计算结果比对


Performance Test

其实我本人最喜欢用的IDE是VS Code,包括本次项目的所有代码编写均采用VS Code完成,但是网上找了好久也没找到简单实用的性能测试插件及工具,所以最后选择了PyCharm Professional(Community版没有)内置的一个强大的图形化性能测试工具称为Profile,使用该工具,可以进行以下任务:

  1. CPU分析:分析代码的运行时间和调用关系,找出执行效率低下的部分。
  2. 内存分析:查看对象的分配和释放情况,并识别内存泄漏。
  3. 线程分析:检测多线程程序中的竞争和死锁问题。
  4. 网络分析:分析网络请求和响应时间,并识别慢速请求。

Profile在运行时使用了cprofile以及其中profiler这两个工具来记录运行时间,显示统计结果的时候使用了pstats这个工具来进行表格化显示。在PyCharm Professional的界面如下所示:

Pycharm Profile

点击 运行 -> 分析 开始性能测试,代码运行结束后会生成一栏测试结果,测试结果由两部分构成,Statistics(性能统计)和Call Graph(调用关系图)

Profile结果:可以看到,使用PyCharm的Profile可视化工具之后,结果是一个pstat文件,其中有一部分是Statistics,另一部分是Call Graph


v0.2Perfomance Test
  • Statistics面板

v0.2Statistics

  • Call Graph调用关系图

v0.2Call Graph


v0.3Perfomance Test
  • Statistics面板

v0.3Statistics

  • Call Graph调用关系图

v0.3Call Graph

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

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

相关文章

PLC 编程和 IIOT 工业物联网的区别是什么

PLC 编程和 IIOT 工业物联网的区别:1.技术定义和应用范围;2.功能特性对比;3.系统架构差异;4.数据处理方式;5.未来发展趋势。PLC 主要负责现场控制和设备直接管理,而 IIOT 则担负着将设备数据互联互通、优化整体生产流程的任务。1.技术定义和应用范围 PLC 编程:是指利用一…

陈柯烽的第二次作业

这次作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 实现一个命令行文本计数统计程序。能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。姓名-学号 陈柯烽-2022329301006Gitee地址:https://gitee.com/ckf123456/text-counting-statisti…

大数据作业

做了几个小时,最后还是这死出,解决了一个又来了一个 费尽心思解决了这个问题

MySQL的自增ID用完了应该怎么办

一种解决方法是使用BIGINT数据类型。BIGINT数据类型的最大值是9223372036854775807,这比INT数据类型大得多。如果您使用BIGINT数据类型来存储自增ID,那么您的表可以插入更多的数据。一、MySQL的自增ID用完了应该怎么办 解决方案1:使用BIGINT数据类型 一种解决方法是使用BIGI…

第四次高级语言程序设计作业

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第四次个人作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13293 姓名:阿卜杜拉阿布力克木 学号:102400110 6.16.16.16.56.16.76.16.86.16.96.16.106.16.126.16.136.16.156.16…

PHP中的错误处理最佳实践

在PHP中,错误处理最佳实践包括错误日志记录、使用异常处理机制、设置自定义错误处理器,和配置错误报告级别。其中,使用异常处理机制可以让代码更加健壯,并且易于调试。 异常处理允许开发者将错误处理代码与业务逻辑分离,使得后者更清晰,更准确地反映出程序应有的流程。通…

如何使用数据分析进行人群管理

在进行人群管理时,使用数据分析是关键、提高目标精准度、增强客户满意度,并可以深化客户洞察,优化营销策略。数据分析能帮助我们理解目标人群的行为习惯、购购物偏好、媒体使用习惯等多维度信息。以提高目标精准度为例,借助数据分析技术,我们可以细分市场、创建买家画像,…

项目经理在项目成本控制中的技巧

项目经理在项目成本控制中的技巧包括:精确的项目预算编制、持续的成本监控、主动的风险管理、有效的沟通协作、实施变更控制、成本效益分析。在这些技巧中,精确的项目预算编制尤为关键。通过对项目活动细致划分、历史数据参考、市场调研以及专家判断等方式,能够确保预算的精…

Adams导出图象/数据的主要设置

步骤:Result——Postprocessor——File——Export。 Export之后会有多种选项,以下列举常用的各个选项: 1.Plot Config File: 该选项会导出一个.plt文件,系AutoCAD打印文件。这一步会弹出界面:Config File Name是你要导出文件名称。 Target是你要导出的路径。 Page Names是…

黑盒、白盒和自动化测试有什么区别

黑盒测试、白盒测试和自动化测试是软件测试领域的关键技术,每种方法有各自特点与适用场景。1、黑盒测试不考虑内部实现细节,重在测试软件功能的正确性。2、白盒测试深入到代码内部逻辑,验证代码执行的正确性和完整性。3、自动化测试侧重于利用自动化工具来执行测试用例,提升…

徐冰岩的第二次作业

这次作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 实现一个命令行文本计数统计程序。能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。姓名-学号 徐冰岩-2022329301028Gitee地址:https://gitee.com/xu-bingyan8399/software-engineer…

静态网页和动态网页有什么区别

​​静态网页和动态网页在构建和呈现方式上存在显著差异。本文探讨了静态网页与动态网页的区别,包括:1. 页面内容生成方式;2. 用户交互性;3. 数据加载方式;4. 适用场景差异;5. 网站性能影响。深入剖析了这两种网页类型的技术特点,为读者更好地理解和选择适当的网页类型提…