20254122洛桑平措 实验四报告

20254122 2025-2026-2 《Python程序设计》实验4报告
课程:《Python程序设计》
班级: 2541
姓名: 洛桑平措
学号:20254122
实验教师:王志强
实验日期:2026年5月26日
必修/选修:专选课
一、实验要求
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
批阅:注意本次实验不算做实验总分,前三个实验每个实验15分,累计45分。本次实践算入综合实践,打分为45分。
评分标准:
(1)程序能运行,功能丰富(至少5个功能)。(需求提交源代码,并建议录制程序运行的视频)15分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。20分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。10分
二、实验设计
程序运行视频:【20254122洛桑平措python作业-哔哩哔哩】 https://b23.tv/Ei2GfF9
1.程序介绍
本次的实验老师给了我们几个程序或者是几个不同的任务让我们去做,由于我自己平常就爱打一些在电脑上的小游戏像扑克牌、扫雷等等,所以我就想着自己生成一个游戏,其次最重要的原因是因为我自己的技术以及能力的限制,我就选择了较为基础的游戏板块。在游戏板块中我选择了我自己最喜欢的扫雷,因此这次我写了一个功能丰富的扫雷游戏。
2.游戏玩法介绍
(1)基本操作:
鼠标左键:点击未翻开的格子将其翻开
鼠标右键:点击未翻开的格子添加红色旗帜标记(怀疑是地雷),再次点击取消标记
重新开始按钮:随时重置当前游戏
难度下拉框:切换游戏难度,切换后自动重新开始
(2)游戏目标
在 60 秒倒计时结束前,不踩到任何地雷的前提下,翻开棋盘上所有非地雷的安全格子。
3.游戏规则
数字含义:翻开的格子上显示的数字,表示该格子周围 8 个相邻格子中隐藏
地雷总数
空白区域:如果翻开的是空白格子(数字为 0),会自动展开周围所有相连的空白格子和数字格子
标记功能:标记过的格子无法被左键翻开,防止误踩;剩余地雷数会随标记操作实时更新
首次点击安全:保证玩家第一次点击永远不会踩到地雷,避免开局就结束游戏
4.难度选择
提供三种经典难度:简单:9×9 棋盘,10 个地雷
中等:16×16 棋盘,40 个地雷
困难:16×30 棋盘,99 个地雷
难度越高,地雷密度越大,游戏节奏越快,获得的基础分也越高。
5.胜负判断
胜利条件:所有非地雷格子都被成功翻开
失败条件:左键点击到地雷格子
游戏结束时会自动显示所有地雷位置,并用叉号标记出玩家错误标记的格子。
6.计分方式
采用 "基础分 + 时间奖励 + 标记奖惩" 的综合计分规则:
基础分:简单 1000 分、中等 2000 分、困难 5000 分(仅胜利时获得)
时间奖励:规定时间内完成游戏可获得额外奖励,完成速度越快奖励越高
标记奖惩:正确标记一个地雷 + 50 分,错误标记一个 - 30 分,取消正确标记 - 50 分,取消错误标记 + 20 分
历史对比:游戏结束时会自动与上一次得分对比,给出个性化的提示。
三、实验过程
1.这部分是游戏的总开关,程序一启动就会先执行这里。主要干了三件事:
设置主窗口的标题定义了三个难度的参数,用字典存起来,后面加新难度只要往字典里加一行就行初始化了所有会用到的变量,每个变量都加了注释说明是干什么的最后调用两个方法,先画界面,再把游戏重置到初始状态
image

2、创建界面
这部分负责把所有能看到的东西都画出来。我把界面分成了三部分:
顶部的信息栏:从左到右依次放了难度选择、剩余地雷数、计时器、得分和重新开始按钮,让它们排成一排
中间的棋盘区域:先放了一个空的 Frame,后面动态生成的按钮都会放在这里
底部的结果显示区域:用来显示游戏结束后的结果和得分对比提示
所有需要后面更新内容的标签(比如地雷数、时间、得分)都存成了类的成员变量,这样后面才能修改它们的文字。
image

3、地雷生成的方法
这部分是生成地雷的核心。我用了一个 while 循环,直到放够指定数量的地雷才停止。最关键的是加了 "第一次点击安全" 的机制:
地雷不是程序一启动就生成的,而是等玩家第一次点击之后才生成
第一次点击的格子和它周围 8 个格子组成一个 9 格的安全区,这个区域里绝对不会有地雷
用 - 1 表示地雷,存到二维数组里对应的位置这样就不会出现玩家刚点开游戏就踩雷的情况,体验好很多。
image

4、计算数字的方法
地雷生成完之后,就要计算每个非地雷格子周围有几个地雷。用了三层循环:
最外面两层遍历整个棋盘的每个格子
如果是地雷(值为 - 1),就跳过不用算
最里面两层遍历当前格子周围的 8 个格子
统计周围有几个地雷,把结果存到对应的位置
这里加了坐标范围的判断,使得边缘和角落的格子不会越界报错。
image

5、左键点击处理
这是整个游戏最复杂的部分,处理玩家的左键点击。主要流程是:
先做三个判断:游戏结束了、已经标记了、已经翻开了,这三种情况都不处理点击
如果是第一次点击,就启动计时器,生成地雷,计算数字
把当前格子加入已翻开集合
如果点到了地雷,就触发游戏失败流程
如果没点到地雷,就显示这个格子的内容,加 10 分
如果是空白格(值为 0),就用队列的方式自动展开周围所有相连的空白格和数字格
最后检查有没有赢
这里自动展开我一开始用的递归,后来发现大棋盘会栈溢出,就改成了用队列的迭代方法,再也没出过问题。
image

6、右键点击处理
右键点击用来标记和取消标记地雷。逻辑很简单:
游戏结束了或者已经翻开了的格子,不能标记
如果已经标记过了,就取消标记,调整剩余地雷数和分数
如果没标记过,而且还有剩余地雷可以标记,就添加红色旗帜标记
更新界面上的剩余地雷数显示
最后检查一下有没有赢(有时候标记完最后一个地雷正好就赢了)
image

7、胜负判断的方法
赢的条件很简单:已翻开的格子数等于总安全格子数(总格子数减去地雷数)。如果赢了:
把游戏状态设为结束
把重新开始按钮的文字改成 "游戏胜利!"
自动把玩家没标记的地雷都标上
计算最终得分
image

8、计分相关方法
这部分是我自己设计的计分规则:
赢了才能拿基础分,难度越高基础分越高
规定时间内完成有时间奖励,越快奖励越多
正确标记一个地雷加 50 分
输了的话只扣错误标记的分,每个扣 30 分,不会扣太多打击积极性
最后会和上一局得分对比,然后更新得分记录。
image

9、程序入口
这是程序的入口。创建一个主窗口,实例化一个 Minesweeper 对象,然后启动 tkinter 的事件循环,程序就开始运行了。
image

四、实验结果与测试
代码运行视频:【20254122洛桑平措python作业-哔哩哔哩】 https://b23.tv/Ei2GfF9
写完之后我自己玩了好几十遍,也让室友帮忙测试了一下,整体效果还不错。所有核心功能都能正常运行:界面显示正常,按钮点击有反馈,地雷随机生成,第一次点击永远安全;数字计算准确,空白区域自动展开流畅;左右键点击正常,标记功能好用,剩余地雷数实时更新;胜负判断准确,游戏结束后显示所有地雷和错误标记;计分系统正常,时间奖励和标记奖惩计算正确;历史记录功能正常,能和上一局得分对比
image

五、问题与解决方法
问题1:单词拼错了,程序直接跑不起来
解决方法:我当时完全看不懂报错信息,以为是我电脑坏了,重启了好几次 PyCharm 都没用。后来我把代码一行一行和课本上的例子对比,才发现单词拼错了。改过来之后瞬间就好了。
问题2:少写了一个冒号,代码全变红
解决方法:写 if 判断的时候,我经常忘写后面的冒号,结果 PyCharm 直接把这一行标红了,问了同学才知道,Python 里 if、for、def 这些语句后面都必须加冒号。
问题3:点到大片空白的时候程序直接闪退
解决方法:简单难度玩着好好的,结果一玩困难难度,有时候点到一大片空白的地方,程序 "啪" 一下就没了,什么提示都没有。查了百度才知道,是我写的自动展开空白格的方法太笨了,遇到大片空白的时候电脑算不过来就崩溃了。后来在同学的帮助下修复了这个问题。
问题4:分数会变成负数
踩坑过程:有一次我玩的时候标错了好几个地雷,结果分数越扣越少,最后变成了 - 120 分,最后我在加分扣分的地方加了个判断,如果分数小于 0 了,就直接把分数改成 0。这样不管扣多少分,最低就是 0 分,不会再出现负数了。
六、课程总结
本学期的 Python 课程内容安排得特别合理,由浅入深、层层递进,一共涵盖了七大核心模块,把 Python 最常用、最实用的知识都讲透了:
1.Python 语言基础入门
第一节课老师就给我们介绍了 Python 的特点,我才知道原来它是一门跨平台的编程语言,在 Windows、苹果电脑上都能运行,而且不用编译,写一行就能运行一行,特别适合我们这些零基础的人。最有意思的是 Python 名字的由来,居然不是因为蟒蛇,而是因为作者喜欢的一个喜剧团体,一下子就觉得这门语言亲切了不少。和其他编程语言比起来,Python 的语法特别的简洁,不用写很多复杂的符号,读起来就像英语一样,这对我们文科生来说太友好了。
2.基础语法与语句
这部分是整个课程的基础,也是我踩坑最多的地方。我们学了变量怎么定义、整数和小数这些数据类型怎么用,还有加减乘除这些基本运算。最重要的是条件语句和循环语句,if-else用来判断不同的情况,for循环和while循环用来重复做一件事。一开始我总是忘记写了语句后面的冒号,或者缩进错了位置,导致程序跑不起来,后来练得多了,慢慢就养成了习惯。现在回头看,这些基础语法虽然简单,但却是所有程序的核心,不管写什么代码都离不开它们。
3.常用数据结构
这部分我们学了列表、元组、字典和集合四种最常用的数据结构,让我们清楚地理解了它们的区别:列表就像一个可以随便加东西减东西的购物车;元组就像一个封好的包裹,一旦装进去就不能改了;字典就像一本字典。我印象最深的是切片操作,它能快速取出列表里的一部分元素,不过一开始总是搞混 "取头不取尾" 的规则,经常少取一个元素,练了好多次才熟练。
4.字符串处理
字符串就是我们平时说的文字,这部分对我们文科生来说特别实用。我们学了怎么统计一个字在一段话里出现多少次、怎么查找某个词的位置、怎么把大写字母改成小写字母。这些功能以后写论文、处理公文的时候都能用得上,比如批量统计报告里某个关键词出现的次数,不用再手动一个个数了。
5.函数与面向对象编程
函数就是把一段经常用到的代码打包起来,以后想用的时候直接调用就行,不用再重复写一遍,特别方便。面向对象编程一开始我觉得特别抽象,什么 "类" 啊、"对象" 啊,完全听不懂。后来老师举了个例子,说 "学生" 是一个类,我们班里的每一个同学就是这个类的一个对象,我一下子就明白了。这次做扫雷游戏的时候,我把整个游戏都封装成了一个类,才真正体会到面向对象的好处,代码变得特别整齐,找 bug 也方便多了。
6.异常处理与文件操作
写程序的时候难免会出错,异常处理就是用来捕获这些错误的,不让程序直接崩溃。我们学了try-except语句,把可能出错的代码放在try里面,出错了就执行except里的内容。文件操作也特别实用,我们学了怎么打开一个文件、怎么往里面写东西、怎么读取文件里的内容。本来我想在扫雷游戏里加一个成绩排行榜功能,把玩家的分数存在本地文件里,就是用的这部分知识,虽然最后因为时间关系没做完,但也掌握了基本的操作方法。
7.网络爬虫基础
最后一部分我们学了网络爬虫,它能自动从网页上抓取我们需要的信息。老师讲了爬虫的基本原理,就是模拟浏览器向网站发送请求,然后把返回的内容解析出来。不过老师也特别强调了爬虫的法律风险,告诉我们不能随便爬别人的网站,尤其是涉及个人隐私和商业机密的内容,不然可能会触犯法律。这部分知识对我们做行政调研特别有帮助,以后需要收集数据的时候,就不用手动一个个复制粘贴了。
二、学习感悟与体会
这学期的 Python 学习,对我来说是一次特别宝贵的经历,不仅学会了一门技能,更改变了我对编程的看法。一开始我真的特别害怕这门课,觉得自己是文科生,逻辑思维不好,再加上自己在西藏就没接触过,所以想着肯定学不会。第一次写代码的时候,连怎么新建文件都不知道,写一个简单的 "Hello World" 都花了半天时间。但王老师讲课特别通俗易懂,从来不会讲那些晦涩难懂的专业术语,总是用我们能听懂的例子来解释知识点。而且老师特别有耐心,不管我们问的问题多基础、多简单,老师都会一遍一遍地给我们讲,有时候还会课后留下来帮我们解决问题。在老师的鼓励下,我慢慢有了信心,也越来越喜欢编程了。编程最锻炼人的就是细心和耐心。有时候程序跑不起来,可能只是因为一个字母拼错了,或者少写了一个空格。我经常为了找一个小小的错误,盯着代码看一两个小时。这个过程虽然很煎熬,但当终于找到错误,程序成功运行的时候,那种成就感是任何东西都比不了的。通过这学期的学习,我变得比以前细心多了,做事情也更有耐心了。这次期末大作业做扫雷游戏,是我第一次独立完成一个完整的项目。从最开始的需求分析,到设计游戏结构,再到一行一行写代码、调试 bug,前前后后花了一个多星期的时间。中间遇到了很多困难,比如点哪个按钮都只显示最后一个格子的内容、点到大片空白程序就闪退等等。但我没有放弃,查百度、问同学,一个问题一个问题地解决。当最后游戏成功跑起来,能完整地玩一局的时候,我真的特别开心,也深刻体会到了 "功夫不负有心人" 这句话的含义。
最重要的是,我发现编程其实离我们文科生一点都不远。以前我觉得编程就是用来写游戏、做网站的,和行政管理工作没什么关系。但现在我知道,Python 能帮我们做很多事情:批量处理 Excel 表格、自动生成公文、统计调研数据、爬取公开信息等等。这些功能能大大提高我们的工作效率,把我们从繁琐的重复性工作中解放出来。以后参加工作了,我一定会把这学期学到的 Python 知识用起来,让自己的工作更轻松、更高效。
三、课程意见与建议
总的来说,这门课的教学质量特别高,老师教得好,内容也实用,我真的特别满意。如果说有什么建议的话,就是结合我们行政管理专业的特点,提几点小小的想法:
第一,希望能多增加一些和我们专业相关的案例。现在课上的例子大多是通用的,如果能多讲一些比如怎么用 Python 批量处理 Word 公文、怎么统计会议数据、怎么生成调研报告这些内容,我们就能更直观地感受到 Python 在行政管理工作中的用处,学习的积极性也会更高。
第二,建议适当增加一些课堂小测和期中练习。说实话,有时候课后如果没有作业的话,我就不会主动去复习学过的知识,导致前面的内容忘得很快。如果能每学完一个模块就做一次小测,或者加一次期中考试,就能督促我们及时复习,巩固所学的知识。
第三,希望能多留一些课堂实践的时间。有时候老师讲得比较快,我们还没来得及消化,就进入下一个知识点了。如果能每讲完一个知识点,就留一点时间让我们在课堂上动手写一写代码,遇到问题当场就能问老师,学习效果会更好。
最后,真的特别感谢王老师这一学期的辛勤付出。老师不仅教会了我们 Python 知识,更让我们克服了对编程的恐惧,感受到了代码的魅力。这门课将会成为我大学期间最有收获的课程之一。祝愿老师工作顺利,天天开心,也希望这门课能越办越好,让更多的文科生爱上编程!
最后,我也想借此机会做一次反思,在我们第一次写Python实验报告时,由于当时的时间紧迫也是第一次和王老师打交道不敢和老师请示作业能否晚交一会儿,直接选择了抄袭同学的gitee的截图,也被老师抓了个现行,但是从那次起我深刻的反思了自己的行为,也开始认真的写每一次的作业,我也觉得这算是给我的一次教训,在今后的学习生涯中绝对不会在出现了。也祝老师身体健康,工作顺利,家庭美满!!!

posted @ 2026-06-15 13:24  20254122  阅读(3)  评论(0)    收藏  举报