20244222 2024-2025-2 《Python程序设计》实验4报告

20244222 2024-2025-2 《Python程序设计》实验4报告

课程:《Python程序设计》
班级: 2442
姓名: 杨景淇
学号: 20244222
实验教师:王志强
实验日期:2025年5月22日
必修/选修: 专选课

1.实验内容

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

2. 实验过程及结果

1.选题分析:本次实验未规定选题,由于最近在备考四级,所以对背单词这方面需求较大,而纸质单词本携带不便,且机械记忆效率低下,缺乏科学的复习机制。因此我根据需求,设计了了一个单词学习卡片,通过可视化记忆增强效果,并自适应学习难度调节。
2.实验过程:
(1)首先导入tkinter库,即python标准的GUI库,用于创建图形用户界面。而as tk是为tkinter设置别名,简化后续代码书写。

(2)导入random模块:用于实现随机选择单词的功能;并对单词库进行定义,创建一个包含英文单词和中文释义的元组列表(英文单词, 中文释义),可自由扩展此列表添加更多单词。

(3)定义主应用类:使用面向对象方式组织代码,提高可维护性;
采用类初始化方法:在创建类实例时自动调用;
使用root参数:传入Tkinter的主窗口对象;
保存主窗口引用,将传入的root窗口保存为类属性;
设置显示在窗口顶部的标题文本;
设置窗口尺寸:宽400像素,高300像素;
设置窗口背景色:使用浅灰色(#F0F0F0)作为背景。

(4)创建卡片标签:text=:初始无文本,font=("Arial", 24):使用Arial字体,24号大小,relief="raised":设置凸起边框效果,bd=3:边框宽度3像素,width=15, height=5:卡片尺寸(字符宽度和行高),bg="white":白色背景;
放置卡片:使用pack布局管理器,设置垂直方向30像素的边距;
绑定鼠标事件:当鼠标左键()点击卡片时,调用flip_card方法;
创建按钮框架:用于容纳三个难度按钮,bg="#F0F0F0":与窗口背景色一致;

(5)放置按钮框架:垂直方向10像素边距;
创建"简单"按钮:放置在button_frame内、显示文本"简单"、宽度8个字符、点击时调用next_card方法并传入参数"easy"、side="left":左对齐布局、padx=5:水平方向5像素内边距;
创建"一般"按钮:结构与简单按钮类似,参数为"medium";
创建"困难"按钮:结构与简单按钮类似,参数为"hard";

(6)初始化变量,存储当前显示的单词元组,记录当前显示的是单词(False)还是释义(True);

(7)检查当前单词,确保有单词可翻转;
显示释义:如果当前显示单词(not showing_meaning)设置卡片文本为中文释义(current_word[1])更新状态标志为True;
如果当前显示释义(showing_meaning)设置卡片文本为英文单词(current_word[0])更新状态标志为False;

(8)设置获取新单词方法:difficulty参数:单词难度级别,默认"easy";
随机选择单词:从单词库中随机选取一个元组;
更新卡片显示:显示英文单词;
重置显示状态:确保新单词初始显示英文;
更新窗口标题:显示当前难度级别、将首字母大写;

(9)设置主程序入口:确保直接运行此脚本时执行以下代码;
创建主窗口,即Tkinter应用程序的根窗口;
创建应用实例,将主窗口传入FlashCardApp类;
启动事件循环,监听用户交互事件(点击、键盘等),保持窗口运行;

(10)运行程序。
3.实验成果展示。
https://www.bilibili.com/video/BV16x7HzdEZr/

3. 实验过程中遇到的问题和解决过程

  • 问题1:窗口无法显示或闪退

  • 问题1解决方案:python环境问题或者显卡驱动不兼容。因此重新改善。root.mainloop() 是Tkinter的主事件循环,它会保持程序运行并监听用户交互事件;而try-except 结构用于捕获执行过程中可能发生的异常:当mainloop()执行过程中出现任何异常时(如窗口意外关闭、回调函数出错等),异常对象会被捕获并赋值给变量e;捕获后打印错误信息到控制台:print(f"程序错误: {e}")通过input()暂停程序,防止窗口立即关闭,方便我查看错误信息。

  • 问题2:单词库重复显示相同单词,随机选择算法未排除已学单词

  • 问题2解决方案:添加已学单词记录。
    使用init初始化方法:创建一个实例变量 learned_words 作为空列表,用于存储已经学习过的单词;
    接着用next_card 方法:
    首先通过列表推导式从全局变量 vocabulary 中筛选出未学习的单词。如果没有可用单词(所有单词都已学习),则重置 learned_words 列表。随机选择一个可用单词作为当前单词 current_word,将当前单词添加到已学单词列表。最后注释表明其余处理卡片显示的代码保持不变。

其他(感悟、思考等)

1.实验总结:
在本次实验中,我成功实现了一个功能完整的单词学习工具:(1基础单词展示,随机显示英文单词(2卡片翻转功能,点击卡片可查看中文释义(3难度分级系统,三个难度级别按钮(4简洁的界面布局和配色方案。
在这编写简单的单词学习卡片程序的过程中,我掌握了Python图形界面开发的核心技能,比如使用tkinter创建窗口和组件;实现用户交互功能;管理程序状态和数据;将编程知识应用到实际学习场景。我学到了很多实用的编程技能:1)GUI开发基础:掌握了tkinter窗口、标签、按钮等组件的创建;学会了事件绑定(点击卡片)和状态管理;理解了pack/grid布局管理器的使用场景2)面向对象编程;将程序组织为类和方法;使用self关键字管理对象状态,提高了代码的可读性和可维护性3)实际问题解决能力:学会查阅官方文档解决技术问题;掌握基本的调试技巧;能够将大问题拆解为小步骤逐步解决4)单词学习新方法:体验了数字化学习工具的优势;理解了"主动回忆"的学习原理;发现了编程与学习的结合点。
2.个人感悟:
这不仅仅是一个课堂作业的完成,更像是在数字世界开垦出第一块属于自己的土地。作为python初学者,这次单词学习卡片项目带给我的感悟,远比想象中更加深刻。开发过程并非一帆风顺。它教会我的不仅是技术问题的解决,更是一种思维方式的转变。每次调试成功的喜悦,都像在迷宫中找到出口般令人振奋。
作为学生,我获得了独特的双重体验。在调试程序时我是程序员,在使用程序时我又变回学习者。当看到卡片翻转时单词释义的呈现,我突然意识到这不仅是界面交互,更是认知心理学的可视化实践——主动回忆理论就这样通过代码获得了生命。我真实地感受到:一行行代码正在创造价值。这种创造带来的满足感,远超过消费任何现成软件的快感。
现在回望这个简单的单词卡片程序,它仍是那么简陋,但它教会我将复杂需求拆解为可执行的步骤,让我渴望掌握更多库和框架。
正如我在python课上学的第一课:每个复杂的系统都始于最简单的"Hello World"。而我的单词卡片,就是向编程世界发出的第一声问候。当代码从作业变成作品,当需求从任务变成使命,我知道,这趟编程之旅才刚刚开始——而前方,星辰大海。
此外,我非常感谢王老师的教导。您总能在我迷茫时、不知所措时提供帮助。这个小程序的成功运行离不开您的淳淳教诲,课上事无巨细的讲解知识点,总能及时解疑答惑。每次的课堂签到总能很好的活跃气氛,让我们关注课堂。课上您是令人尊敬,德高望重的好老师,课后您也是我们的好伙伴。感谢老师的倾囊相授!和蔼可亲的笑容,富有感染力的睿智,令我受益匪浅。祝福老师工作顺利,培育更多的优秀学生!

posted @ 2025-05-29 23:34  H4n3_7uM  阅读(80)  评论(0)    收藏  举报