20234203 2023-2024-2 《Python程序设计》实验4 Python综合实践
20234203 2023-2024-2 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2342
姓名: 郑凯夫
学号:20234203
实验教师:王志强
实验日期:2024年5月27日
必-修/选修: 公选课
一、实验项目
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等
评分标准:
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。20分。
(3)实验4的遇到的问题以及感想体会。5分。
(4)对全课进行总结,并写课程感想体会、意见和建议等。10分。
二、实验过程
对2048这个游戏一直挺上头的,形策课有一次院士还提到了,觉得做一个2048是一个不错的方向
在观看B站视频、csdn社区讨论已经咨询相关专业同学后,开始编写
对2048游戏的制作需要对制作相应的游戏面板(本次以标准4*4为例)

设置游戏面板尺寸,并规定初始值为0


规定程序通过left up down right进行移动,控制同一行或同一列数值可以进行移动与合并

在程序运行中添加数值保证游戏正常进行

判断游戏是否到达结束条件,即当没有空格且无法进行任何有效移动时,游戏结束

根据输入的方向,选择相应的移动函数执行。确保只有在移动导致面板发生变化时(即有有效移动),才更新面板状态并添加新数字。
将程序拆分上述部分,合并可得完整简易4*4的2048游戏代码
以下是源代码
import random
import copy
# 初始化
def init_board(size=4):
return [[0 for _ in range(size)] for _ in range(size)]
# 游戏面板
def print_board(board):
for row in board:
print(" ".join(str(cell).rjust(5) for cell in row))
print()
# 移动
def move_direction(board, direction):
def shift_and_merge(line):
line = [x for x in line if x != 0]
merged = []
skip = False
for i in range(len(line)):
if skip:
skip = False
continue
if i < len(line) - 1 and line[i] == line[i + 1]:
merged.append(line[i] * 2)
skip = True
else:
merged.append(line[i])
return merged + [0] * (len(board) - len(merged))
if direction == 'left':
for row in board:
row[:] = shift_and_merge(row)
elif direction == 'right':
for row in board:
row[:] = shift_and_merge(row[::-1])[::-1]
elif direction == 'up':
for col in range(len(board)):
column = [board[row][col] for row in range(len(board))]
shifted = shift_and_merge(column)
for row, val in enumerate(shifted):
board[row][col] = val
elif direction == 'down':
for col in range(len(board)):
column = [board[row][col] for row in range(len(board) - 1, -1, -1)]
shifted = shift_and_merge(column)
for row, val in enumerate(shifted[::-1]):
board[len(board) - 1 - row][col] = val
# 添加随机新数字
def add_new_tile(board):
empty_cells = [(r, c) for r in range(len(board)) for c in range(len(board[r])) if board[r][c] == 0]
if empty_cells:
r, c = random.choice(empty_cells)
board[r][c] = random.choice([2, 4])
# 检查游戏是否结束
def is_game_over(board):
if any(0 in row for row in board):
return False
directions = ['left', 'right', 'up', 'down']
for direction in directions:
temp_board = copy.deepcopy(board)
move_direction(temp_board, direction)
if temp_board != board:
return False
return True
# 主游戏循环
def main():
board = init_board()
add_new_tile(board)
add_new_tile(board)
while not is_game_over(board):
print_board(board)
move_input = input("请输入移动方向(left, right, up, down): ").strip().lower()
if move_input in ['left', 'right', 'up', 'down']:
move_direction(board, move_input)
add_new_tile(board)
else:
print("无效的输入,请重新输入!")
print("\n游戏结束!感谢游玩。")
if __name__ == "__main__":
main()
!!!老师我的csdn不知道咋搞的没有传输视频的选项,没法在这里展示了,会打包给课代表的

(运行截图)
三、实验问题及感受
1.在实验项目选择中发现有需要cfg模块、pygame等额外插件,可以win+r在cmd中输入cfg进行下载已经在官方网站下载pygame
2.在4*4盘满时仍然继续运行,无法结束。 在进行前确保通过一个函数检查游戏板上是否存在空位。如果没有空位,则不再生成新数字,避免循环。
四、全课总结与感想
在学长的建议下,选择了python作为本学期的一门选修课,转眼结课,不知时间过隙。也带着一点高中时期对python的一些兴趣,以及会考里的一些遗憾,对python课也是充满自信的。(然而自信仅仅持续三周)
收获也是很多的,从python语言的字符运算、数据类型(就是字符串、列表、字典那些啦)、还有控制结构(诸如条件语句、循环)等等。控制结构也算是比较得心应手的一个小模块了,现在想来还是成就感十足。在一次次的实验中,看着自己的小程序从一次次调试运行不断出错,到正常运行,期间不停地查阅资料,咨询同学,对照老师给出的代码,出错试错的过程,就是知识汲取的过程。不停的循环语句做出自己的猜数字游戏,不停调试实现了同一网络下服务端和客户端的交互,由简入难,自己对python也是有一种又爱又恨的感觉。非常感谢老师地宽容,面对抽问不会的情况,依旧选择原谅我们并且不厌其烦地解答问题,深深体会到老师治学之严谨,教学之敬业。希望自己在日后学习也可以戒骄戒躁脚踏实地,敬畏知识,学以致用。
关于课程,我也有一些自己的小的提议!即使老师您意识到文科班对于python理解的艰难晦涩而放缓进度,但理解起来还是有些吃力,希望老师可以对重点内容加以强调或者查阅网络资料,用通俗的语言向同学们阐明道理。另外,自己在csdn的浏览过程中发现python的应用中,关于python小游戏的开源大部分会使用到pygame,感觉到pygame的应用还是比较广泛的,想到我们有类似的实验任务和实验课程,我认为如果课程充裕的条件下老师可以向大家拓展一下pygame,感觉大家的兴趣会更广一些。感觉知识的遗忘还是很严重的,自己没有认真去记是很大一部分,也希望老师作为课程的第二负责人可以对我们多加约束(可以多问问甚至多考考,现场再写一串代码~)
最后的最后,还是感谢老师对我们的倾情授课!我们学到了好多!“未来的人生,一路繁花似锦”,我们会记住这个学期在富丰路7号发生的故事,和那个燃烧着整片天空的傍晚。
相关推荐
AI大模型开发V2第四阶段 PyTorch框架使用配套代码
AI大模型开发V2第四阶段 PyTorch框架使用【配套代码】
PHP后端开发Laravel与ThinkPHP框架实战及Web安全防护VIP技术手册
本手册为一份完整的 PHP 后端开发与安全实战 Word 文档(.docx,可编辑,约 6500 字正文 + 13 幅原创配图),内容涵盖:PHP 8.x 环境搭建与 Composer 工程化、Laravel 10 博客系统完整开发(建模、认证、CRUD、测试)、ThinkPHP 6 RESTful API 开发(验证器、Token 认证、限流、统一响应)、Symfony 6.4 微服务架构与 Docker 部署、SQL 注入/XSS/CSRF/文件上传五大漏洞原理与修复、HTTPS 与 AES-256-GCM 加密存储、OPcache/Redis/负载均衡性能调优,以及上线前安全检查清单与命令速查附录。 适用人群:PHP 初学者、全栈开发者、准备面试或项目实战的后端工程师、需要进行安全加固的运维与开发人员。 使用场景及目标:从零搭建可运行的博客/API 项目,掌握主流框架开发流程,建立完整的 Web 安全防护与性能优化知识体系,可直接作为团队培训教材或上线评审 checklist 使用。
超扭滑模与快速终端滑模的永磁同步电机无感控制:理论、离散化实现与仿真研究(Simulink仿真实现)
内容概要:本文系统研究了超扭滑模控制(STSMC)与快速终端滑模控制(FTSMC)在永磁同步电机(PMSM)无感控制中的应用,深入探讨了两种先进非线性控制策略的理论基础、离散化实现方法及Simulink仿真实验。文章重点分析了基于高频信号注入法的PMSM零低速无位置传感控制技术,有效解决了传统物理传感器难以安装或成本高昂场合下的转子位置与速度估算难题。通过构建高阶滑模控制器与磁链无感观测器,实现了对电机状态的精确估计与鲁棒控制,显著提升了系统在动态响应、抗外部干扰和稳态精度方面的综合性能。研究涵盖控制算法设计、离散化处理、抖振抑制策略以及仿真验证全过程,为高性能、高可靠性电机驱动系统的设计提供了完整的理论支撑与实践范例。; 适合人群:具备自动控制理论、现代电机控制技术基础,熟悉MATLAB/Simulink仿真环境,并从事电气传动、新能源汽车、工业自动化、航空航天等领域的高校研究生、科研人员及工程技术人员。; 使用场景及目标:①研究和设计无需位置传感器的永磁同步电机控制系统,降低系统成本与维护难度;②深入掌握超扭滑模与快速终端滑模控制算法的核心原理、稳定性分析方法及其在数字控制器中的离散化实现技术;③利用Simulink搭建完整的电机控制仿真平台,验证先进滑模控制策略在不同工况下的有效性、鲁棒性与动态性能;④为高精度伺服系统、电动汽车电驱系统、轨道交通牵引系统等对可靠性和性能要求严苛的应用场景提供先进的无感控制解决方案。; 阅读建议:建议读者结合文中提供的Simulink仿真模型与相关参考文献,深入理解滑模控制的设计思想、切换函数构造原则与控制器参数整定方法,重点关注滑模观测器的设计流程与抖振抑制技术(如引入边界层或高阶滑模),同时可通过仿真对比不同控制策略的性能差异,并进一步拓展至其他先进非线性控制策略(如自适应滑模、模糊滑模)的研究与对比实验。
商业计划书-互联网-清新雅致.docx
商业计划书-互联网-清新雅致
国央企如何借助科技报告优化研发方向?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。


