20251213吴同心《Python程序设计》实验四实验报告

课程:《Python程序设计》
班级: 2512
姓名: 吴同心
学号:20251213
实验教师:王志强
实验日期:2026年5月25日
必修/选修: 公选课

1.实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

2.源代码和运行小视频
源代码:https://gitee.com/monitly/aminoas/blob/master/实验四.py
小视频:https://www.bilibili.com/video/BV1MnGo6uETU/?vd_source=d277be8d8d73b86e78c98a486968d8c9

3.实验过程

(1)程序功能与设计:
利用网络爬虫爬取输入的单词释义,然后可进行单词的学习和默写,并且将错题存入错题本(用文件实现),还可以对错题本中的单词进行听写,不断巩固
这些功能的选择通过一个循环的菜单实现

(2)程序分析
①架构设计上采取经典的面向对象
整个程序被封装在一个名为VocabularyApp 的类中,所有与背单词相关的属性(如单词列表、错题本、文件路径)和方法(如爬虫、学习、测试、保存)都被打包在一起,结构清晰。
易扩展:如果你想增加“单词发音”或者“每日打卡”功能,只需要在类里添加新方法,并在主菜单加个选项即可,完全不会破坏现有的代码逻辑。
②功能较为完善
功能1通过调用百度翻译接口,实现了动态扩充词库的能力,打破了本地死记硬背的限制。
功能2和3提供了“看词识意”和“看意拼词”两种基础模式,符合背单词习惯。
功能4和5不仅能记录错误,还设计了两种不同强度的复习模式,特别是“答对销账、答错重来”的机制,契合了刻意练习的需求。
③程序没有使用复杂的数据库,而是巧妙地利用了JSON文件,从而在错题听写模式中,每答完一题就自动保存一次,极大地提升了程序的健壮性,防止意外退出导致进度丢失。

(3)实现过程
第一步:定义类与初始化
创建一个名为 VocabularyApp 的类,并在 init 初始化方法中定义了程序运行所需的核心变量:
数据容器:准备了self.word_list(主词库)和self.wrong_words(错题本)两个空列表。
存储路径:指定了用来保存数据的两个 JSON 文件名。
加载历史:在程序一启动时,就自动调用load_data(),把上次保存的单词和错题读取到内存中,确保记忆不中断。
image

第二步:实现网络爬虫
有了容器,接下来需要解决“数据来源”的问题。这一步实现了动态获取单词的功能:
寻找接口:选用了百度翻译的公开接口( https://fanyi.baidu.com/sug )。
发送请求:利用 Python 的 requests 库,向接口发送包含目标单词的 POST 请求。为了让服务器以为我们是真人操作,还加上了标准的浏览器请求头(User-Agent)。
解析数据:接口返回的是 JSON 格式的数据,我们通过字典键值对提取出其中的中文释义(data_json['data'][0]['v']),并将其封装成 {word: "apple", meaning: "苹果"} 这样的标准格式存入主词库。
image

第三步:构建核心背单词逻辑,实现具体的学习、测试和管理功能:
学习模式:最简单,直接遍历打印主词库里的所有单词。
普通测试:利用random.sample随机抽取几个单词,通过input()获取用户输入并与正确答案比对。如果拼错,就把该单词追加到错题本列表中。
错题管理:提供一个简单的查看界面,并允许用户一键清空错题记录。
错题闯关:复制一份错题列表并打乱顺序,进入一个while循环。在这个循环里,答对了就从原错题本中彻底删除,答错了就重新塞回队列末尾(留级),并且每轮交互后都实时调用保存功能。

第四步:数据持久化
为了防止程序关闭后数据丢失,我们在关键节点植入了文件读写操作:
保存:利用Python内置的json 模块,将内存中的列表转换成 JSON 格式的字符串,写入本地.json文件。
加载:程序启动时检查文件是否存在,存在则读取并转换回Python列表,保证了用户的学习进度可以跨次保存。
image

第五步:装开关(主菜单与驱动)
最后用一个控制台来指挥这一切:
主菜单循环:在run方法中写了一个死循环(while True),不断打印功能选项,并根据用户的数字输入(1-6)来分发执行对应的功能方法。
点火启动:也就是你刚才问的那最后三行代码。实例化 VocabularyApp 对象,并调用它的 run() 方法,让整个程序真正运转起来。
image

(4)结果
image
image
image
image

4.遇到的问题和解决方法
问题:网址用爬虫爬取总是失败
解决方法:换另一种可行的网址,重新设计程序

5.课程总结与感谢、意见、建议
以前,听闻python鼎鼎大名以及它在各行各业大放异彩、用处广泛,便兴致勃勃报了这门课。
然而,恍然之间,这节课就结课了————课程虽说不长不短,我却学了不少基础python语法和编写程序的方法,从那些和C语言近似的“简单”语法,再到类、列表、socket等新操作,为我打开了新世界的大门,实在受益匪浅。
王老师幽默风趣,解答问题耐心又有条理,富有经验,虽然有的地方讲的比较快,作业有的地方比较复杂,我也建议之后能够调整一下(?),但这阻挡不了我学习python的热情。
一学期的课程就这样落下帷幕,而我的学习仍将继续,也希望我能保持这股热情,刻苦学习,砥砺奋进,同时灵活运用python课程所学,在未来学习、工作生活中用它完成一个又一个课题,迎接光明的未来。
同时也希望王老师工作顺利,身体健康,感谢您的栽培!

参考资料
《Java程序设计与数据结构教程(第二版)》

《Java程序设计与数据结构教程(第二版)》学习指导

posted @ 2026-05-25 23:25  Aminoas  阅读(36)  评论(0)    收藏  举报