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和其他编程语言,不断提升自己的综合素质和竞争力。

 

...全文
395 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文研究了一种周期感知LightGBM预测与NSGA-Ⅱ优化耦合的建筑群能源系统协同调度方法,旨在提升建筑群能源系统的低碳经济性和运行效率。该方法首先利用周期感知的LightGBM模型对建筑群的能源负荷与可再生能源出力进行高精度时序预测,充分挖掘数据中的周期性规律,显著提高预测准确性;随后,结合多目标优化算法NSGA-Ⅱ,构建协同调度模型,综合考虑经济成本、碳排放和能源利用率等多个目标,求解得到一组帕累托最优调度方案,实现多目标间的均衡优化。研究通过Python编程实现了完整的预测与优化流程,并在实际场景中验证了所提方法在降低系统运行成本和减少碳排放方面的有效性。; 适合人群:具备一定Python编程基础,从事电力系统、能源管理、智能优化或机器学习相关领域的研究人员与工程技术人员,尤其适合关注多目标优化与时间序列预测融合应用的硕士、博士研究生及科研工作者。; 使用场景及目标:①应用于建筑群、园区等多主体能源系统的协同调度与低碳优化;②实现对光伏、负荷等具有强周期性特征的时间序列数据进行精准预测;③解决能源调度中经济性、环保性等多目标相互冲突的优化问题,获得兼顾各方需求的调度策略。; 阅读建议:此资源以实际代码实现为核心,建议读者在学习过程中结合Python代码,重点理解周期特征提取、LightGBM模型构建、NSGA-Ⅱ算法应用及多目标优化结果分析等关键环节,并尝试在不同场景下复现和调整参数,以深化对方法原理与工程应用的理解。
内容概要:本文围绕“考虑储能和可再生能源消纳责任制的售电公司购售电策略”展开研究,采用遗传算法构建优化模型,旨在帮助售电公司在电力市场化环境下制定科学合理的购售电决策。研究综合考虑了储能系统的运行特性、可再生能源出力的不确定性以及国家对可再生能源消纳的强制性考核要求,构建了一个融合经济性、合规性与风险控制的多目标优化框架。通过Python编程实现算法求解,对不同场景下的购电组合、储能调度策略及收益情况进行仿真分析,验证了所提模型在提升售电公司经济效益和履行社会责任方面的有效性与实用性,为其在复杂市场环境中的运营决策提供了理论支持和技术工具。; 适合人群:具备一定电力系统基础知识和Python编程能力,从事电力市场、能源管理或优化算法研究的研发人员、高校研究生及行业分析师。; 使用场景及目标:①为售电公司设计满足可再生能源消纳考核要求的购售电策略;②研究储能系统在电力市场交易中的经济调度与价值实现;③学习遗传算法在复杂多目标能源优化问题中的建模与实现方法。; 阅读建议:此资源以复现科研论文为目标,强调算法实现与策略分析的结合,建议读者在学习过程中重点关注目标函数的设计、约束条件的处理以及遗传算法参数的调优,并动手运行代码以加深对模型收敛性与策略有效性的理解。

93

社区成员

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

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