20222127李新卓 2022-2023-2 《Python程序设计》实验四报告

m0_74728948 m0_74728948 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

20222127李新卓 2022-2023-2 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2221
姓名: 李新卓
学号:20222127
实验教师:王志强
实验日期:2023年5月23日
必修/选修: 公选课

1.实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等;
此次综合实践,实现经典小游戏扫雷。
2.实验环境

操作系统:Windows 10
Python版本:Python 3.8
开发工具:PyCharm 2020
3.实验步骤

建立Python项目
在PyCharm中新建Python项目,命名为"minesweeper"。

导入Tkinter库
在minesweeper项目中新建一个Python文件minesweeper.py,并导入tkinter库:

import tkinter as tk

实现Minesweeper类
在minesweeper.py中,实现Minesweeper类,该类负责管理游戏数据和游戏界面。

首先在构造函数中初始化游戏数据:雷区布局、地图状态、游戏状态、剩余雷数等。

在生成雷区布局的generate_board()函数实现中,随机放置10个地雷,并根据地雷分布生成数字标记。

在create_button(x, y)函数实现中,为雷区的每个方格创建一个按钮。每个按钮有一个回调函数callback,处理按钮的点击事件。

在回调函数中,需要根据点击的格子的值来确定游戏的状态并进行相应的操作,比如展开格子、展示地雷、展示胜利信息等。如果点开的是空白方块,需要递归展开周围方块。游戏状态和剩余雷数等信息需要实时在状态栏中显示。

最后,在if name == "main"部分调用Minesweeper类,并启动游戏主循环。
4.实验代码

import tkinter as tk
import random


class Minesweeper:

    def __init__(self, master):
        self.master = master
        self.master.title("Minesweeper")

        # 游戏数据:雷区布局、地图状态、游戏状态、剩余雷数
        self.board = [[0 for _ in range(10)] for _ in range(10)]
        self.map = [[None for _ in range(10)] for _ in range(10)]
        self.game_over = False
        self.mines_left = 10

        # 生成雷区布局
        self.generate_board()

        # 界面设计:菜单栏、状态栏、游戏区
        self.menu_bar = tk.Menu(self.master)
        self.master.config(menu=self.menu_bar)

        self.status_bar = tk.Label(self.master, text="Remaining mines: {}".format(self.mines_left))
        self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)

        self.game_frame = tk.Frame(self.master, bd=2, relief=tk.RAISED)
        self.game_frame.pack(side=tk.TOP, pady=2, padx=2)

        # 游戏区填充按钮
        self.buttons = [[self.create_button(x, y) for y in range(10)] for x in range(10)]

    def generate_board(self):
        # 随机放置10个地雷
        for _ in range(10):
            placed = False
            while not placed:
                x, y = random.randint(0, 9), random.randint(0, 9)
                if self.board[x][y] == 0:
                    self.board[x][y] = -1
                    placed = True

        # 根据地雷分布生成数字标记
        for x in range(10):
            for y in range(10):
                if self.board[x][y] != -1:
                    for dx in [-1, 0, 1]:
                        for dy in [-1, 0, 1]:
                            if 0 <= x+dx < 10 and 0 <= y+dy < 10 and self.board[x+dx][y+dy] == -1:
                                self.board[x][y] += 1

    def create_button(self, x, y):
        def callback():
            if self.game_over or self.map[x][y] is not None:
                return
            if self.board[x][y] == -1:
                self.game_over = True
                self.status_bar.config(text="Game over!")

                # 显示所有地雷
                for i in range(10):
                    for j in range(10):
                        if self.board[i][j] == -1:
                            self.buttons[i][j].config(fg="red", text="*")

            else:
                self.map[x][y] = self.board[x][y]
                self.buttons[x][y].config(text=self.board[x][y])

                # 如果点开的是空白方块,递归展开周围方块
                if self.board[x][y] == 0:
                    for dx in [-1, 0, 1]:
                        for dy in [-1, 0, 1]:
                            if 0 <= x+dx < 10 and 0 <= y+dy < 10:
                                self.buttons[x+dx][y+dy].invoke()

            # 检查游戏是否结束
            mines_left = sum([row.count(None) for row in self.map])
            if mines_left == 0:
                self.game_over = True
                self.status_bar.config(text="You win!")

        button = tk.Button(self.game_frame, width=2, command=callback)
        button.grid(row=x, column=y)
        return button


if __name__ == "__main__":
    root = tk.Tk()
    app = Minesweeper(root)
    root.mainloop()

5.代码分析
该代码实现了扫雷游戏的功能。它使用了Python的tkinter库来构建游戏界面,游戏数据存储在一个二维数组中。游戏区分为若干个按钮,每个按钮表示游戏中的一个格子。点击按钮时根据点击的格子的值来确定游戏的状态并进行相应的操作,比如展开格子、展示地雷、展示胜利信息等。通过随机放置地雷和生成数字标记来构建雷区。在游戏结束时,显示游戏胜利或失败的信息。整个游戏的逻辑由一系列函数实现,如随机放置地雷、生成数字标记、创建按钮等。整个游戏的主要逻辑由Minesweeper类实现,每个按钮的回调函数中处理按钮点击事件。游戏界面按照菜单栏、状态栏、游戏区的顺序从上到下排列。整个游戏由if name == "main"部分调用,即构造了一个Tk对象和Minesweeper对象,启动游戏主循环。
6.实验结果
利用Pycharm运行该代码,即可开启扫雷游戏。

游戏界面由菜单栏、状态栏和游戏区构成,如下图所示。

img

游戏开始前看不到任何数据,但地雷已经被随机放置在雷区中。点击右侧的按钮,即可开始游戏。每次点击将会展开一个方格,根据该方格的内容在地图上标记相关信息,如下图所示。

img

当点击到地雷时,游戏结束,界面显示“Game over!”;当剩余的未开方格全为地雷时,游戏胜利,界面显示“You win!”。

img

img

img

7.托管至gitee

img

8.实验中遇到的问题及解决措施
(1)问题:无法导入Tkinter库
解决措施:自己长时间摸索,求助同学帮助。
(2)问题:无法托管gitee,显示已存在
解决措施:上网查阅资料,得知可以直接提交

img

9.心得体会
本实验通过实现Python扫雷游戏,使我掌握了Python数值计算、控制语句和函数等基本编程语法,并学会了使用tkinter库构建简单的图形用户界面。实践证明,开发扫雷游戏是学习Python编程的一种很好的方式,可以提高编程能力,加深对Python编程语言的理解和运用。

10.课程总结
本学期原本选修Python课程,只是因为系统原因导致没选上喜欢的课。但真正接触这门课程后,我不禁为Python语言的精彩绝伦而拍手叫好,相较于C语言、JAVA等计算机语言,Python语言更显得实用与简便。它是一门非常有潜力的高级语言,在字符串上的处理,相对于其他程序有更多的便利。不仅如此,Python语言的库也很多,正因为它强大的库,让编程变得不再艰难。刚接触Python时,学会的代码print<“hello world!”>和print<"人生苦短,我用Python!">让我对这门课产生了极大兴趣,在这之后,不论是丰富的知识,还是老师幽默风趣的讲述,都让Python这门课程更加的吸引我。在后面几次Python课程的学习中,老师在课上讲得比较快,课上有时会跟不上,但是在课后也能够及时的去弥补不足,还是能够对Python学习的更多。虽然这几个月下来,我对Python的学习也仅仅只是它的基础方面,但Python的强大,也是足足地吸引着我。我希望自己能够在不断地学习中,将Python学习的更加好。

...全文

相关推荐

新型电力系统下PI-LSTM物理信息长短期记忆神经网络的电力变压器状态评估方法(Matlab代码实现)

内容概要:本文提出了一种基于物理信息长短期记忆神经网络(PI-LSTM)的电力变压器状态评估方法,旨在适应新型电力系统对设备状态精准评估的需求。该方法将物理规律作为先验知识融入LSTM网络,通过构建包含变压器热力学、电气特性等物理约束的损失函数,提升模型在数据稀疏或噪声干扰下的泛化能力与解释性。利用Matlab实现了PI-LSTM模型的搭建、训练与验证,通过实际案例对比传统LSTM与PI-LSTM在状态参数预测精度、趋势拟合度及异常检测敏感性方面的表现,证明了所提方法的有效性和优越性,为变压器等关键电力设备的智能运维提供了新的技术路径。; 适合人群:从事电力系统、智能电网、设备状态监测与故障诊断研究的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①应用于新型电力系统中电力变压器的健康状态评估与预测性维护;②为掌握物理信息神经网络(PINN)在电力系统中的融合应用提供Matlab实践范例; 阅读建议:建议读者结合Matlab代码深入理解PI-LSTM的网络结构设计、物理约束项的数学表达与代码实现细节,并尝试在不同工况数据集上复现和测试,以充分掌握其在提高模型物理一致性与预测可靠性方面的核心优势。

然哥爱编程

硕士复现燃料电池供氢系统建模及控制策略Simulink仿真(附带说明PPT+参考文献+复现模型+实物源码)

内容概要:本资源聚焦于燃料电池供氢系统的建模与控制策略研究,通过Simulink仿真平台实现系统动态行为的精确模拟与控制算法的验证。内容涵盖供氢系统的关键部件建模,如氢气供应管路、压力调节阀、储氢罐及燃料电池堆等,并针对系统响应滞后、压力波动等问题,设计并实现了先进的控制策略,例如基于反馈与前馈的复合控制、PID控制或模型预测控制(MPC),以确保氢气供给的稳定性与效率。配套提供的说明PPT详细阐述了建模思路与控制逻辑,参考文献为研究提供了理论支撑,而完整的复现模型与实物源码则极大地方便了学习者进行仿真复现与二次开发。; 适合人群:具备一定自动化、电气工程或能源动力系统背景,正在进行相关课题研究的研究生,以及从事氢能系统开发的工程技术人员。; 使用场景及目标:① 学习并掌握燃料电池供氢系统的工作原理与关键组件的数学建模方法;② 利用Simulink搭建复杂能源系统的仿真模型,并设计、调试与验证先进控制策略;③ 基于提供的完整资源包(PPT、模型、源码)进行科研复现,作为学位论文或学术研究的技术基础。; 阅读建议:学习者应结合说明PPT的理论讲解,逐步操作复现模型,重点关注控制模块的设计逻辑与参数整定过程。建议在理解现有模型的基础上,尝试修改工况参数或优化控制算法,以深化对系统动态特性的认识,从而将本资源作为开展自主创新研究的有效跳板。

小念念_

考虑供电可靠性与算力柔性的数据中心园区源‑储‑荷一体化规划研究(Matlab代码实现)

内容概要:本研究聚焦于数据中心园区的能源系统规划,提出了一种综合考虑供电可靠性和算力柔性的源-储-荷一体化规划方法。该方法通过构建数学模型,将可再生能源发电、储能系统与数据中心的计算负载进行协同优化,旨在提升能源利用效率与系统运行的稳定性。研究引入算力柔性概念,即根据电力供应情况灵活调整计算任务的执行时间和强度,从而实现供需动态平衡。文中采用Matlab进行仿真建模与求解,验证了所提规划方案在降低能耗成本、提高供电可靠性和增强系统灵活性方面的有效性,为绿色、高效的数据中心能源管理提供了新的思路和技术支撑。; 适合人群:具备一定电力系统或能源管理背景,从事数据中心、新能源、智能电网等相关领域研究的研发人员和工程技术人员。; 使用场景及目标:①应用于数据中心园区的能源系统规划设计,优化可再生能源、储能与算力资源的配置;②实现数据中心在保障服务质量的同时,最大化消纳绿电、降低运营成本并提升应对电力波动的韧性。; 阅读建议:读者应结合Matlab代码,深入理解模型构建过程,重点关注目标函数的设计、约束条件的设定以及算力柔性调度策略的实现方式,以便将该方法迁移应用到实际工程项目中。

三伯

墙面裂缝检测7500张YOLO+VOC格式(已增强).zip

数据集格式:VOC格式+YOLO格式 压缩包内含:3个文件夹,分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计:7500 Annotations文件夹中xml文件总计:7500 labels文件夹中txt文件总计:7500 标签种类数:4 标签名称:["crack","horizontal crack","slanted","vertical crack"] 每个标签的框数(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准): crack 框数 = 6621 horizontal crack 框数 = 1906 slanted 框数 = 862 vertical crack 框数 = 690 总框数:10079 图片清晰度(分辨率:像素):清晰 图片是否增强:是 标签形状:矩形框,用于目标检测识别 重要说明:暂无 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注

不会仰游的河马君

城市盲道及障碍物检测数据集VOC+YOLO格式9705张16类别.md

亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: **本资源原本已设置为“0积分下载”**,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,**自动将部分资源的积分调整为非0数值**(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 **因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。** 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。**强烈建议:仅在页面显示为0积分时进行下载。** 另外,本资源描述中**并未直接提供具体的下载地址或外部链接**,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

fl176831
评论
收藏 已收藏
分享
返回顶部