当前位置: 首页 > news >正文

20254220 2025-2026-2 《Python程序设计》实验四报告

2025-2026-2《Python程序设计》实验4报告
课程:《Python 程序设计》
班级:2542
姓名: 梁晋源
学号: 20254220
实验教师:王志强
实验日期: 2026 年5月26日
必修 / 选修:公选课

  1. 实验内容
    本次实验是《Python程序设计》课程的综合性实践作业,核心任务是独立开发一个功能完整的Python小程序。我选择完成经典扫雷小游戏项目,属于课程实操要求中的小游戏开发实践方向。
    本次实验主要围绕扫雷游戏核心功能展开,全程使用Python语言进行开发,主要内容包括:自主实现游戏地图生成、随机布雷、格子周边地雷数量统计、用户坐标交互、游戏胜负判定等核心功能。同时针对输入异常、地图边界、重复操作等特殊情况做了容错处理,保证程序稳定运行。本次实验全程使用PyCharm完成代码编写、功能调试和整体测试,完整走完了小型程序开发的全流程。
  2. 实验过程及结果
    2.1 实验过程
    需求分析与设计
    我先梳理了经典扫雷游戏的基础规则,把整体项目拆分成五个核心模块,分别是地图生成、随机布雷、地雷数计算、用户交互输入、胜负判断。同时确定了程序的数据结构,用二维列表存储游戏地图,结合集合存储地雷坐标,从整体上理清了代码的编写逻辑和函数调用流程,避免后续编码出现逻辑混乱。
    编码实现
    根据拆分的模块逐一编写代码,自定义多个功能函数:通过create_board函数初始化游戏地图并随机布置地雷;利用count_mines函数遍历周边格子,统计每个位置的地雷数量;借助print_board函数可视化打印游戏界面;最后在main主函数中搭建游戏主循环,持续接收用户输入、更新游戏状态、判定游戏输赢,串联起整个游戏流程。
    测试与调试
    代码编写完成后,我进行了多场景测试,分别测试了合法坐标输入、超出地图范围的非法输入、非数字格式输入、重复打开格子等多种情况。针对测试中出现的索引越界、程序闪退、计数错误等问题逐一排查修改,不断优化代码,确保程序在各种场景下都能正常、稳定运行。
    2.2 核心代码

扫雷小游戏 - Python期末作业

import random

def create_board(rows, cols, mines):
"""生成游戏地图并布置地雷"""
board = [[' ' for _ in range(cols)] for _ in range(rows)]
mine_positions = set()
# 利用集合去重,保证地雷位置唯一不重复
while len(mine_positions) < mines:
r = random.randint(0, rows-1)
c = random.randint(0, cols-1)
mine_positions.add((r, c))
# 批量布置地雷
for r, c in mine_positions:
board[r][c] = '💣'
return board, mine_positions

def count_mines(board, r, c, rows, cols):
"""计算指定格子周围的地雷数量"""
count = 0
# 遍历当前格子四周8个方向的位置
for dr in [-1, 0, 1]:
for dc in [-1, 0, 1]:
if dr == 0 and dc == 0:
continue
nr, nc = r + dr, c + dc
# 边界判断,避免索引越界报错
if 0 <= nr < rows and 0 <= nc < cols:
if board[nr][nc] == '💣':
count += 1
return count

def print_board(visible):
"""打印游戏地图界面"""
# 打印顶部列坐标
print(" " + " ".join(str(i) for i in range(len(visible[0]))))
print("--+" + "-+" * len(visible[0]))
# 逐行打印游戏地图
for i, row in enumerate(visible):
print(f"{i} |" + "|".join(row) + "|")

def main():
"""游戏主逻辑"""
# 初始化游戏参数:5*5地图,3个地雷
rows, cols, mines = 5, 5, 3
board, mine_pos = create_board(rows, cols, mines)
visible = [['■' for _ in range(cols)] for _ in range(rows)]
safe_cells = rows * cols - mines # 总安全格子数量
opened = 0 # 已开启的安全格子计数

print("===== 扫雷小游戏 =====")
print(f"地图大小:{rows}x{cols} | 地雷数:{mines}")
print("输入格式:行 列(例如:0 2)")

游戏主循环

while True:
print_board(visible)
# 捕获非法输入异常
try:
r, c = map(int, input("请输入坐标:").split())
except:
print("输入错误!请输入两个数字,如:0 1")
continue

判断坐标是否超出地图范围

if not (0 <= r < rows and 0 <= c < cols):
print("超出范围!")
continue

判断格子是否已经开启

if visible[r][c] != '■':
print("已经打开过了!")
continue

踩到地雷,游戏结束

if (r, c) in mine_pos:
print("")
print("💥 你踩到地雷了!游戏结束!")
print("
")
print_board(board)
return

计算周边地雷数并更新界面

num = count_mines(board, r, c, rows, cols)
visible[r][c] = str(num)
opened += 1

全部安全格子开启,游戏胜利

if opened == safe_cells:
print("")
print("🎉 恭喜你!扫雷成功!")
print("
")
print_board(board)
return

if name == "main":
main()
2.3 实验结果
本次编写的扫雷程序整体运行流畅,各项预设功能均正常实现。程序可以稳定生成规格为5×5的游戏地图,随机布置3个不重复的地雷,用户输入对应坐标即可开启格子,界面会精准显示周边地雷数量。当用户踩到地雷时,会及时提示游戏结束并展示完整的地雷分布;若成功打开所有安全格子,会触发胜利提示。同时程序对各类错误输入做了适配,面对非数字输入、坐标越界、重复点击格子等操作,都会给出清晰的文字提示,不会出现闪退、崩溃等问题,整体容错性良好。
3. 实验过程中遇到的问题和解决过程
随机布雷出现重复坐标,导致实际地雷数量不足
最初编写布雷逻辑时,单纯用循环随机生成坐标,经常出现地雷位置重复的情况,最终地图上的地雷数量达不到预设数值。后来我利用集合元素唯一、自动去重的特性,用集合存储所有地雷坐标,直到集合数量达到预设地雷数才停止循环,彻底解决了地雷重复、数量不足的问题。
输入格式错误时程序直接崩溃
测试过程中发现,当输入字母、单个数字或多个乱序字符时,程序会直接报错终止运行。针对这个问题,我添加了try-except异常捕获结构,专门处理用户输入异常的情况,同时添加文字提示,引导用户规范输入,保证程序不会因输入错误闪退。
重复打开同一格子会导致计数错误,提前触发胜利条件
初期代码没有格子状态判断,重复点击已开启的安全格子时,计数会持续累加,导致还没开完所有格子就判定游戏胜利。我通过增加状态判断,仅当格子为未开启的■状态时,才执行开启和计数操作,有效避免了重复计数的bug。
读取地图边缘格子周边信息时出现索引越界报错
在计算地图最边缘、最角落格子的周边地雷数时,程序会因为访问超出列表下标范围的位置而报错。我在遍历周边格子的逻辑中添加了坐标边界判断,只统计地图范围内的有效坐标,成功解决了索引越界的问题。
4. 课程总结与学习感悟
4.1 课程整体知识总结
本学期的《Python程序设计》课程内容循序渐进、由浅入深,让我从零开始系统接触并掌握了Python编程的核心知识。课程前期主要学习基础语法,包括变量、常用数据类型、运算符、输入输出等基础内容,搭建起了编程的知识框架。中期重点学习了程序流程控制,熟练掌握了if条件判断、for和while循环、break和continue跳转语句,能够独立编写具备完整逻辑的小程序。
同时课程还讲解了函数的定义与调用、参数传递、返回值等知识,让我学会将复杂代码拆分封装,让代码更简洁、复用性更强。除此之外,列表、集合等常用数据结构的用法、try-except异常处理等知识点,也让我掌握了优化代码、提升程序稳定性的方法。本次扫雷小游戏的开发,正是对本学期所有核心知识点的综合运用,让我把零散的理论知识整合起来,真正实现了学以致用。
4.2 课程学习体会
经过一学期的Python课程学习,我最大的感受是编程重在实践。刚开始上课时,我只能看懂课本上的理论代码,自己动手编写时总会出现各种小问题。随着不断敲代码、调试bug,我慢慢熟悉了编程逻辑,也养成了耐心排查问题的习惯。
这次扫雷实验让我收获很大,从一开始的功能拆解、逻辑构思,到逐行编码、调试纠错,全程都是独立思考和实践的过程。我彻底吃透了循环、条件判断、函数封装、异常处理这些核心知识点,也明白了编程不是死记硬背代码,而是学会用逻辑解决实际问题。每当修复一个bug、实现一个新功能时,都能感受到满满的成就感,也让我对编程产生了更浓厚的兴趣。
同时我也意识到自己的不足,比如代码优化能力较弱,编写逻辑不够简洁高效,后续还需要多练习、多积累,不断提升自己的编程思维和实操能力。
4.3 课程意见与建议
首先,非常感谢老师本学期的耐心教学,课程内容通俗易懂,很适合零基础同学入门,整体学习体验很好。结合自身学习情况,我有几点小小的建议。希望课堂可以增加更多趣味实操案例,比如简易计算器、猜数字游戏、批量处理文本等贴近日常的小项目,让我们能在课堂上即时练习,加深知识记忆。同时建议适当增加课堂互动和答疑环节,大家编写代码时遇到的问题各不相同,集中答疑可以帮助我们更快解决疑惑。对于学有余力的同学,可以适当拓展一些简单的进阶内容,比如基础的文件操作、第三方库使用等,拓宽大家的知识面。此外,也可以适当布置小组协作编程任务,锻炼团队合作开发的能力,为后续学习打下更好的基础。
5. 实验感悟与思考
本次综合实验是对我本学期Python学习成果的一次全面检验。通过自主开发扫雷小游戏,我彻底摆脱了只会看代码、不会写代码的困境,真正做到了灵活运用课堂所学知识。在不断调试、修改bug的过程中,我学会了拆解复杂问题、分步排查错误,逻辑思维和问题解决能力都得到了很大提升。
同时我也深刻认识到,编写程序不仅要实现基础功能,更要考虑程序的稳定性和用户体验,做好异常处理和边界判断,才能让程序更加完善。这次实验让我真切体会到编程的趣味性和实用性,也让我明白编程学习没有捷径,只有多动手、多思考、多复盘,才能稳步提升。未来我也会继续坚持练习,巩固所学知识,尝试开发更多有趣、实用的小程序。
参考资料
《Python 编程:从入门到实践》、Python 官方文档: https://docs.python.org/3/ 、扫雷游戏逻辑设计参考教程
22bfe8e505fb139efa16032e772d3add

5034b452b56e572af9aecc444fcafb47

http://www.jsqmd.com/news/891962/

相关文章:

  • 科普:论文查重为什么要反复测?书匠策AI免费查重到底怎么用?
  • 双效降重神器|5 款真正能过 AI 检测的论文工具,降重 + 去 AI 痕一步到位
  • AI工具选型生死线(2026真实测评白皮书):92%的企业踩中“幻觉兼容性”陷阱,你中招了吗?
  • 【java】一文带你了解匿名内部类
  • 为什么IPAdapter Plus能彻底改变你的AI创作?5步解锁图像条件生成新境界
  • 手把手教你用CANoe的Replay Block:从导入.asc文件到模拟真实网络负载
  • 别等被查出AI代写才后悔!这3个降AIGC工具,效果好到离谱,速度收藏
  • Python平方运算的7种实现与工程选型指南
  • Proteus实战:STM32外部中断(EXTI)响应机制与按键触发LED流水灯仿真全解析
  • 5分钟掌握Outfit字体:免费开源几何无衬线字体的终极解决方案
  • 考执业药师听哪个老师的课?一份基于真实备考经验的选课参考 - 医考机构品牌测评专家
  • Linux test命令详解
  • 地平线最新提出HorizonDrive:自动驾驶世界模型新范式、实现分钟级自回归生成
  • 毕业论文紧急降AIGC率,求推荐上手快、效果立竿见影的降重工具
  • 如何永久免费激活IDM:终极完整指南与简单解决方案
  • 从“永恒之蓝”到BAT脚本:聊聊那些年我们见过的“低技术”系统破坏手段
  • libhv实战:构建一个具备自动重连与心跳机制的TCP客户端
  • 临床执业医师老师推荐:一位讲师,一套体系,一条路径 - 医考机构品牌测评专家
  • Buzz终极指南:完全离线的智能语音转录与翻译工具
  • AI驱动的现货定价引擎已上线!——某全球Top 3矿商内部白皮书首次公开(含Transformer+物理模型融合架构图)
  • 使用Taotoken CLI工具快速为团队统一开发环境配置模型密钥
  • 别光会抄代码!从Arduino的setup和loop函数,聊聊嵌入式程序的‘心跳’与‘呼吸’
  • 26-cv-2721、26-cv-3253、26-cv-4061MILWAUKEE TOOL 美沃奇工具巨头商标连续发案再度来袭!注意排查!
  • 分区网格与动态模型:高效高精度壁湍流大涡模拟实践
  • 观测 TaoToken 在多模型间自动路由的故障转移表现
  • 2026年上半年烟台财产分割律师排行:5位专业律师实力对比 - 奔跑123
  • 如何快速搭建个人漫画图书馆:免费开源哔咔漫画下载器终极指南
  • 帝国CMS自定义团购模块开发教程
  • 基于ENS210传感器与Arduino的高精度露点监测仪设计与实现
  • CVPR‘26 Highlight 开源|Vista4D:一段视频→任意运镜,任意编辑!