20234227孙语汐实验四报告

20234227孙语汐 2024-05-29 00:00:56

20234227 《Python程序设计入门》实验四报告
课程:《Python程序设计入门》
班级: 2342
姓名: 孙语汐
学号:20234227
实验教师:王志强
实验日期:2024年5月24日
必修/选修: 专选课

一、实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。(源代码、视频、综合实践报告)
注意事项:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。

例如:利用公开数据集,开展图像分类、恶意软件检测等

例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。

例如:爬取天气数据,实现自动化微信提醒

例如:利用爬虫,实现自动化下载网站视频、文件等。

例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等

注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

评分标准:
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。20分。

(3)实验4的遇到的问题以及感想体会。5分。
(4)对全课进行总结,并写课程感想体会、意见和建议等。10分。

二、实验分析
理解游戏逻辑:了解贪吃蛇游戏的基本规则,包括蛇的移动、食物的生成、碰撞检测等。
提升问题解决能力:面对编程中的问题和挑战,学习如何分析和解决。
定义游戏对象:包括蛇、食物、墙壁等,可以使用面向对象编程来定义这些对象及其属性(如位置、大小、速度等)和方法(如移动、绘制等)。
实现游戏逻辑:编写代码来实现蛇的移动、食物的生成和碰撞检测等功能。
测试与调试:运行程序,测试游戏功能是否正常,对出现的问题进行调试。
优化与扩展:根据测试结果对游戏进行优化,如提升运行速度、改善用户体验等;也可以添加新功能,如增加关卡、引入道具等。
代码结构:分析代码的组织结构,评估其是否符合面向对象编程的原则,是否易于阅读和维护。
游戏性能:测试游戏的运行速度、内存占用等性能指标,评估其是否满足要求。
用户体验:从用户的角度出发,评估游戏的操作是否流畅、界面是否美观、音效是否合适等。
问题解决能力:回顾在编程过程中遇到的问题和挑战,分析问题的原因和解决方案,评估自己的问题解决能力是否得到提升。
扩展性:评估游戏是否具有良好的扩展性,即是否容易添加新功能和改进现有功能。

三、实验设计
贪吃蛇游戏:

 

完整源代码如下:

import pygame
import sys
import random

# 初始化pygame
pygame.init()

# 设置颜色
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# 设置屏幕大小
WIDTH = 400
HEIGHT = 400
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))

# 设置蛇的初始位置和速度
SNAKE_SPEED = 10
SNAKE_SIZE = 20
SNAKE_POS = [(5 * SNAKE_SIZE, 5 * SNAKE_SIZE), (4 * SNAKE_SIZE, 5 * SNAKE_SIZE), (3 * SNAKE_SIZE, 5 * SNAKE_SIZE)]
SNAKE_DIR = (SNAKE_SIZE, 0)

# 设置食物的位置
FOOD_POS = None
FOOD_SIZE = SNAKE_SIZE

# 生成食物
def generate_food():
    global FOOD_POS
    x = random.randint(0, (WIDTH // FOOD_SIZE) - 1) * FOOD_SIZE
    y = random.randint(0, (HEIGHT // FOOD_SIZE) - 1) * FOOD_SIZE
    FOOD_POS = (x, y)
    while FOOD_POS in SNAKE_POS:
        generate_food()

generate_food()

# 游戏主循环
clock = pygame.time.Clock()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT and SNAKE_DIR[0] != SNAKE_SIZE:
                SNAKE_DIR = (-SNAKE_SIZE, 0)
            elif event.key == pygame.K_RIGHT and SNAKE_DIR[0] != -SNAKE_SIZE:
                SNAKE_DIR = (SNAKE_SIZE, 0)
            elif event.key == pygame.K_UP and SNAKE_DIR[1] != SNAKE_SIZE:
                SNAKE_DIR = (0, -SNAKE_SIZE)
            elif event.key == pygame.K_DOWN and SNAKE_DIR[1] != -SNAKE_SIZE:
                SNAKE_DIR = (0, SNAKE_SIZE)

    # 移动蛇
    new_head = (SNAKE_POS[0][0] + SNAKE_DIR[0], SNAKE_POS[0][1] + SNAKE_DIR[1])
    SNAKE_POS.insert(0, new_head)

    # 检查是否吃到食物
    if new_head == FOOD_POS:
        generate_food()
    else:
        SNAKE_POS.pop()

    # 检查是否撞到墙或自己
    if new_head[0] < 0 or new_head[0] >= WIDTH or new_head[1] < 0 or new_head[1] >= HEIGHT or new_head in SNAKE_POS[1:]:
        pygame.quit()
        sys.exit()

    # 绘制屏幕
    SCREEN.fill(WHITE)
    pygame.draw.rect(SCREEN, GREEN, (FOOD_POS[0], FOOD_POS[1], FOOD_SIZE, FOOD_SIZE))
    for pos in SNAKE_POS:
        pygame.draw.rect(SCREEN, RED, (pos[0], pos[1], SNAKE_SIZE, SNAKE_SIZE))
    pygame.display.flip()

    # 控制游戏速度
    clock.tick(SNAKE_SPEED)

运行视频:https://v.youku.com/v_show/id_XNjM5NDUyMjEwMA==.html(密码000000)

gif图像:

 

四、实验过程

定义蛇的初始位置、长度和方向。
定义食物的位置和生成规则。
设计碰撞检测机制,用于检测蛇是否碰到自己或边界。
1.编写代码
初始化
导入必要的库和模块。
初始化pygame和设置窗口大小。
游戏循环
创建一个主循环,用于不断更新游戏状态并渲染画面。
事件处理
在游戏循环中处理用户输入事件,如键盘按键。
游戏逻辑更新
更新蛇的位置和方向。
检查蛇是否吃到食物。
如果吃到食物,增加蛇的长度并重新生成食物。
检查蛇是否碰到自己或边界,如果是,则结束游戏。
渲染画面
清除屏幕。
绘制蛇、食物和其他游戏元素。
更新屏幕显示。
结束游戏
如果游戏结束,显示游戏结束画面和分数。
2. 测试与调试
运行程序,检查游戏是否按预期工作。
调试代码,修复任何发现的错误或问题。
3.优化与扩展
优化游戏性能,如提高帧率或减少内存使用。
添加更多功能,如增加难度级别、添加音效或背景音乐、支持多人游戏等。
4. 文档与分享
编写用户手册或帮助文档,解释游戏玩法和操作方法。
将游戏分享给朋友或在线社区,收集反馈并进行进一步改进。

 五、遇到的问题

我最初的想法是简单地将蛇头的位置更新为食物的位置,并将蛇身的其余部分依次向前移动一个单位。但是,我发现这会导致蛇身的每一节都移动到前一节的位置,造成一种蛇身瞬移的视觉效果,而不是平滑的移动。 为了解决这个问题,设计了一个蛇身数组,每次移动时,我都会将蛇头的位置添加到数组的开头,并删除数组的最后一个元素,从而实现了蛇身的平滑移动。

还有处理蛇吃到食物后增长。开始只是简单地将蛇的长度增加了一个单位,但这样做并没有在视觉上增加蛇身的长度。后来修改了蛇吃到食物后的处理逻辑。当蛇吃到食物时,不再只是增加蛇的长度,而是额外地创建一个新的蛇身元素,并将其添加到蛇身数组的开头。这样,每次蛇吃到食物时,它都会在视觉上变长。

在实现游戏边界和蛇身碰撞检测时也有问题。我的想法是简单地检查蛇头的位置是否超出了游戏边界或与蛇身的其它部分重合。但是,这样做需要遍历整个蛇身数组,效率较低。为了提高效率,设计了一个边界和蛇身碰撞检测的函数,它利用蛇身数组中的信息来快速判断是否存在碰撞。这样,每次移动时,只需调用这个函数即可判断蛇是否死亡,大大提高了游戏的性能。
六、感悟

通过设计Python贪吃蛇程序并进行实验分析,我们可以深入理解编程概念和游戏设计原理,提升编程能力和问题解决能力。同时,我们也可以根据实验结果对游戏进行优化和扩展,使其更加完善和有趣。这个过程不仅是一个学习的过程,也是一个挑战和成长的过程。

意识到编程不仅仅是编写代码,更是一个思考和解决问题的过程。在设计贪吃蛇程序时,我遇到了许多挑战,如蛇身移动、增长、边界检测等问题。通过不断思考、尝试和改进,我逐渐找到了解决问题的方法,这让我深刻体会到了编程的乐趣和价值。

其次,我更加明白了代码逻辑和算法的重要性。贪吃蛇游戏虽然看似简单,但其中涉及到了许多逻辑判断和算法设计。如何高效地移动蛇身、检测碰撞、处理食物等都是需要精心设计和优化的。这让我认识到,一个好的程序不仅需要美观的界面和友好的用户体验,更需要强大的代码逻辑和算法支持。

七、全课总结

首先,学习Python让我认识到编程并不只是理科生的专长。文科生在学习的过程中,更加注重的是人文关怀、批判性思维和表达能力。而编程,作为一种解决问题的工具,同样需要这些能力的运用。在编写代码的过程中,我们需要清晰地表达我们的想法,准确地描述问题,并创造性地提出解决方案。这些能力,都是文科生在学习过程中积累下来的宝贵财富。

其次,Python的简洁、易读和易学的特性让我深受吸引。相比于其他编程语言,Python的语法更加简洁明了,易于上手。这让我在学习的过程中感到更加轻松和愉悦。同时,Python的强大功能也让我感受到了编程的魅力和实用性。通过编写Python程序,我可以轻松地处理数据、分析文本、制作网页等等,这些技能在文科领域同样具有广泛的应用价值。

认识到了跨学科学习的重要性。在现代社会中,各个学科之间的交叉融合越来越普遍。学习Python可以促进我与其他学科之间的交流和合作。例如,在数据分析方面,我可以将Python与统计学、社会学等学科结合起来,进行深入的数据挖掘和分析;在文本处理方面,我可以将Python与语言学、文学等学科结合起来,进行文本分析和情感分析等等。这种跨学科的学习模式可以拓宽我的视野。

学习Python也让我更加深刻地认识到了计算机技术在现代社会中的重要性。随着信息技术的不断发展,计算机技术已经渗透到了我们生活的方方面面。无论是工作、学习还是生活,我们都离不开计算机技术的支持。因此,掌握一门编程语言,可以帮助我们更好地适应现代社会的发展需求。

我相信在未来的学习和工作中,我会继续深入学习Python和其他编程语言,不断提升自己的综合素质和竞争力。

 

...全文
337 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文研究基于粒子群算法(PSO)优化模糊C均值聚类(FCM)的居民用电行为分析方法,提出一种改进的FCM聚类算法,通过引入粒子群优化机制,有效提升聚类性能与收敛效率,克服传统FCM算法易陷入局部最优、对初始聚类中心敏感等缺陷。研究基于Matlab平台实现算法代码,对居民用电负荷数据进行聚类分析,识别不同用户的典型用电模式与行为特征,进而支持电力系统的需求侧精细化管理、用户分群运营、个性化用电服务推荐以及中长期负荷预测。该方法在智能电网与大数据背景下展现出良好的应用前景,特别适用于大规模居民用电数据的行为挖掘与模式识别任务。; 适合人群:具备一定电力系统基础知识、数据挖掘或智能优化算法背景的科研人员及工程技术人员,尤其适合从事智能电网、负荷特性分析、需求响应、用户行为研究等方向的硕士、博士研究生及高校教师。; 使用场景及目标:①实现居民用户用电行为的有效分类与典型负荷曲线提取;②优化电力客户细分策略,支撑差异化电价、需求响应激励政策的设计与实施;③为负荷预测、电网规划、配电台区管理提供数据驱动的决策依据;④作为高水平学术论文(如EI、SCI期刊)的研究基础,用于算法复现、性能对比与创新改进。; 阅读建议:建议读者结合提供的Matlab代码深入理解PSO-FCM算法的具体实现流程,重点关注粒子编码方式、适应度函数构建、聚类有效性评价指标(如轮廓系数、误差平方和)的应用,鼓励在真实用电数据集上进行实验验证,并尝试引入其他优化策略或评估维度以进一步提升模型鲁棒性与实用性。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
代码转载自:https://pan.quark.cn/s/a1913ccaa47a 在信息技术领域中,图像处理占据着核心地位,特别是在嵌入式系统以及移动设备上,由于受到资源条件的制约,常常需要将高分辨率的图像格式转化为低分辨率的格式,以此来提升显示效能和存储容量。"bmp格式转为rgb565格式图片转换工具"正是为了应对这种需求而研发的。BMP(Bitmap)是一种广泛应用的位图格式,它完整地记录了图像的每一个像素点信息,涵盖了色彩深度、透明度等参数。然而,这种格式在内存消耗和处理速率方面并不具备优势,尤其是在需要高速渲染的情境下。RGB565是一种16位的色彩编码格式,普遍应用于嵌入式系统,例如由微控制器控制的LCD显示屏。它通过分配5位红色、6位绿色以及5位蓝色分量来表现色彩,总共能够呈现2^16 = 65536种色彩,尽管其色彩数量(约1670万种)少于BMP的24位色彩,但足以满足绝大多数显示场景,并且显著降低了数据存储和传输的负担。这种转换工具的运作机制在于读取BMP文件中的每一个像素点,然后依照RGB565的编码规范重新组织色彩信息。在BMP文件中,像素数据一般以行为单位进行存储,遵循从左到右、自下而上的顺序。而在RGB565格式中,每个像素点由两个字节构成,其中红色和蓝色各占5位,绿色占据6位,这样的布局旨在提升内存中的对齐效率。转换流程通常包括以下几个环节:1. 分析BMP文件头部:BMP文件头部包含了图像的宽度、高度、色彩深度等关键数据,这是进行转换的依据。2. 获取像素数据:按照BMP文件的结构读取每一行的像素点信息。3. 色彩转换:将每个24位RGB色彩点转换为16位RGB565格式。4. 输出新格式:将转换后的RGB565数据写入新的...
内容概要:本文系统研究了基于合作博弈理论的综合能源系统利益分配优化调度方法,并配套提供了完整的Matlab代码实现。针对多个能源主体协同运行场景下的利益分配难题,文章构建了严谨的合作博弈模型,结合优化调度算法,在实现系统整体经济效益最大化的同时,确保各参与方之间的利益分配公平合理。研究内容涵盖模型的数学建模、理论推导、求解流程设计及仿真验证全过程,重点突出了Shapley值等经典博弈分配方法在能源系统中的应用,具有较强的理论深度与工程实践价值,适用于致力于高水平学术研究(如EI/SCI论文撰写)的科研人员。; 适合人群:具备电力系统、优化理论及博弈论基础知识,从事综合能源系统调度、分布式能源协同管理、能源互联网经济性分析等方向研究的硕士、博士研究生及高校科研人员。; 使用场景及目标:①用于多主体综合能源系统中利益分配机制的设计与仿真分析;②支撑高质量学术论文的撰写、复现与创新;③为实际能源项目中的协调调度决策与经济性评估提供理论依据与技术工具支持。; 阅读建议:建议读者结合Matlab代码逐模块研读,深入理解合作博弈模型与优化调度算法的耦合逻辑,重点关注Shapley值等分配机制的计算实现,并可通过调整参数或拓展模型结构进行二次开发与对比实验

93

社区成员

发帖
与我相关
我的任务
社区描述
Python程序设计作业
软件构建 高校 北京·丰台区
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧