20234204 2023-2024-2 《Python程序设计》实验4 Python综合实践

20234204张佳鑫 2024-05-27 16:33:59

 

 

课程:《Python程序设计》
班级: 2342
姓名: 张佳鑫
学号:20234204
实验教师:王志强
实验日期:2024年5月27日
必修/选修: 专选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

2.实验内容及结果

经过反复尝试,在OCR技术实现自动化和编写贪吃蛇小游戏之间,选择了符合我能力水平的贪吃蛇。具体内容为编写“贪吃蛇”程序,使其能够正常运行。

(1)步骤一:新建python项目tanchishe,并设置项目名称目录和运行环境。

(2)步骤二:设置软件源地址,需要依赖“install package"

 (3)步骤三:在项目中创建tanchishe.py文件。

(4)步骤四:在tanchishe.py文件中编写源代码。

(5)排除语法等错误,安装pygame库。从pycharm控制台执行pip install pygame。(尽管程序代码正确,但没有安装pygame库,虽然不会报错,但也不会显示成功运行的游戏界面;在cmd中先安装pip install pygame ,安装成功再安装 python-m pip install--upgrade pip,这样虽然安装了库,但是不在pycharm“module”存储,所以会反复报错)

报错图:

 无游戏运行界面图:

 

 正确安装图:

(6)步骤六:开始运行

(7)源代码:

import pygame
import time
import random

pygame.init()

# 定义一些颜色
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)

# 屏幕尺寸
dis_width = 800
dis_height = 600

dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption('Snake Game by Code Guru')

clock = pygame.time.Clock()

snake_block = 10
snake_speed = 15

font_style = pygame.font.SysFont("bahnschrift", 25)
score_font = pygame.font.SysFont("comicsansms", 35)

def Your_score(score):
    value = score_font.render("Your Score: " + str(score), True, black)
    dis.blit(value, [0, 0])

def our_snake(snake_block, snake_List):
    for x in snake_List:
        pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])

def message(msg, color):
    mesg = font_style.render(msg, True, color)
    dis.blit(mesg, [dis_width / 6, dis_height / 3])

def gameLoop():
    game_over = False
    game_close = False

    x1 = dis_width / 2
    y1 = dis_height / 2

    x1_change = 0
    y1_change = 0

    snake_List = []
    Length_of_snake = 1

    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0

    while not game_over:

        while game_close == True:
            dis.fill(blue)
            message("You Lost! Press Q-Quit or C-Play Again", red)
            Your_score(Length_of_snake - 1)
            pygame.display.update()

            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    if event.key == pygame.K_c:
                        gameLoop()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -snake_block
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = snake_block
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = snake_block
                    x1_change = 0

        if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
            game_close = True
        x1 += x1_change
        y1 += y1_change
        dis.fill(blue)
        pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
        snake_Head = []
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        if len(snake_List) > Length_of_snake:
            del snake_List[0]

        for x in snake_List[:-1]:
            if x == snake_Head:
                game_close = True

        our_snake(snake_block, snake_List)
        Your_score(Length_of_snake - 1)

        pygame.display.update()

        if x1 == foodx and y1 == foody:
            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
            Length_of_snake += 1

        clock.tick(snake_speed)

    pygame.quit()
    quit()

gameLoop()
(8)成功运行视频链接:

file:///C:/Users/Novel/Desktop/ef469f7393acdadae661d518fd3b7e8a_raw.mp4

 

3.实验过程中的遇到的问题以及感想体会

-问题1:源代码无法打开。

-问题1解决方案:打开方式错误,无法将代码直接进行查看,直接将其放置pycharm中成功打开。

-问题2:源代码正确打开后,设置好软件源地址后,pycharm中无效运行

-问题2解决方案:软件源地址设置错误,虽然在CSDN的教学下,可将地址源设置为“default",但是该程序还需依赖“install package”,file-settings—project:tanchishe—phthon interpreter—"+"—“install package”。

-问题3:源代码正确,没有显示报错,但正常游戏界面无法显示。

-问题3解决方案:在命令提示符(cmd)中未安装pygame库,在"C:\Users\Novel>''后先安装pip install pygame ,安装成功再安装 python-m pip install--upgrade pip。

-问题4:在cmd中成功安装pygame库后,且已显示“Requirement already satisfied: pygame in c:\users\novel\appdata\local\programs\python\python311\lib\site-packages (2.5.2)”,在pycharm中仍无法显示成功运行页面。

-问题4解决方案:报错显示:“ModuleNotFoundError:No module named 'pygame' ",多次尝试后,仍然失败。但是在我在其他同学的电脑上按照上述方式,可以成功运行。向老师询问,让我仔细找找逻辑;并通过向CSDN询问,明白还是由于pygame库未正确建立:应该在pycharm软件中的控制台执行“pip install pygame”。缺少pygame库,用命令pip install pygame 安装的前提是 系统安装了pip包管理工具。

-问题5:成功安装pygame库,仍然无法显示游戏页面。

-问题5解决方案:在该代码所在的pycharm的项目中,项目所在的环境有问题,我将此代码在成功安装pygame库后,将它放在此前已运行成功的项目环境中,按上述方法再次进行运行尝试。

-感悟体会:

每一次实验对于小白来说都是一次收获,在进行本次实验之前,我对老师发出的项目实验进行了比对,设计“贪吃蛇”游戏并不是我最初的选择,在我反复尝试“利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中”,在OCR技术这块需要申请资格验证以及一系列让我觉得困难重重的程序后,我最后选择了设计该游戏。

首先我是找寻了“贪吃蛇”游戏的python代码,只是浅显认为,自己只需录入代码后,“run”一下就ok,但事实操作起来并非这样。在本次实验中,困难的地方并不是确保代码的正确,而是重中之重“pygame库”的安装。我先是在电脑主机的命令提示符里安装,并且cmd显示“requirement already satisfied",我本以为pygame库已安装好,所以在pycharm中在没有报错的情况下反复运行,但无论怎么操作重新运行都无法显示游戏页面。反复尝试无果后,我借室友的电脑去运行这个游戏,结果显示很成功。这又让我陷入了大大的疑惑中,但与室友沟通后,还是觉得问题出现在了这个''库''上。

每天都在尝试,每天都在寻求解决的方法,最后在CSDN的帮助下,按照它的指示,重新梳理操作步骤,看是否有步骤被省略或错误进行,发现了问题所在——尽管电脑的命令提示符显示“pygame库”已下载完毕,但对于pycharm来说,No module named 'pygame',因为pycharm本身有它自己的控制台,当我找到pycharm的控制台后重新下载这个“库”,等候加载,游戏终于成功运行。

无论是此次的基础小游戏还是上次的对话交流(客户端和服务端),在我完成试验后,从事实上来看确实花费了大量的时间,但当我成功运行每次项目后,觉得这些任务也并没有我想象的那么难以完成。我觉得我是理论型选手难以胜任技术活,每次的实验相较于学会了一种新的python技能,更让我有收获的是我在实验过程中发现问题后的解决态度以及心理建设,还有成功运行的喜悦。总而言之,python对我来说就是一个反复发现问题,反复解决问题的学习过程,令我苦恼同时也给我带来了享受。

4.全课总结

之于收获,从Python简介(面向对象、面向过程、开发环境、印象最深刻的一句话:人生苦短,我用Python!) 到Python语法(数据类型、if else、while、for 还有序列、字典、列表、元组、切片),再到文件(rwab+)、网络编程Socket……从所学知识上来看是丰富的,虽然还不能做到对每个知识板块了如指掌,但当提到这方面知识时,我并不是空白的;猜拳游戏、数字运算游戏、双向对话游戏以及此次的贪吃蛇游戏,设计的是游戏,收获的是python知识。通过这门课程的学习,我深刻感受到了python的魅力与实用性,即使我所了解到的只是冰山一角。 python对于小白来说,基础语法是简洁易懂的,在王老师的教导下,让我们这些初学者上手快,轻松实现基础应用。在学习的过程中,我不仅提高了自己的编程能力,还培养了逻辑思维和解决问题的能力。此外还学到了上述提及的编程知识,如何编写清晰易懂的代码、如何避免常见的错误、如何进行有效的调试以及如何与王老师有效的沟通等。这些知识和技能对于我的职业发展具有重要的意义,无论是实践成果,还是实践精神。目前我所掌握的只是python知识的皮毛,但我认为这是一个起点。未来如果有机会或者工作需要的话,我会深入学习的,关注python社区的发展动态和新技术成果,就是在实验中,我几乎每次都会想社区进行求教,并且在社区和老师的帮助下,解决了一个个对我来说的难题,所以CSDN社区对我来说,就像是知识问答的平台,助你学习,助你进步。

之于建议, 对于老师的敬仰是大于对python的热爱的,王老师专业的技能,亲和的待人为python这门课程增加了不少的亮点。建议老师可以在今后的课堂上,面对小白学生,心理要有一定的建设能力,对我个人而言起初真的是一窍不通,git都上传不上去,掌握准确的代码都无法成功运行,困难重重;但是老师也要有对学生充分的信任能力,相信我们能够克服困难,完成实验,收获知识。

老师可以增强学生的动手实践能力,课堂掌握能力。起初在您的课堂上,我只是看着您实验操作,听着讲课,偶尔做做笔记,但是当自己试验的时间后还是很困难;后半学期我并没有只观看您讲课,而是选择了动手实践,跟着您一起在idle或者pycharm上进行联系,成功的就截屏,以便后续实验学习,这样我的实验历程相较之前轻松了许多。

遇到上课回答不上问题的学生,绝对不是“因为自己才疏学浅”,请老师相信,是我们的问题。(我回答不上来肯定是我的问题)

谨遵教诲:在dky的大环境中,努力学习、不断沉淀积累,时刻保持学习好习惯,不仅限于专业的学习!

 

 

 

 

 

 

 

 

...全文
63 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

92

社区成员

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

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