42
社区成员




课程:《Python程序设计入门》
班级:2241
姓名:dwj
学号:20224113
实验教师:wzq
实验日期:2023年5月27日
必修/选修:专选课
一、实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
二、实验过程及结果
1.确定实验内容
作为一个Python初学者,我明白自己的能力有限,所以我首先考虑的就是最后设计出的程序代码我能够基本看懂,代码中有我在平时学习中涉及到的内容,这样在整个实验过程中会更加的轻松一点,最终我选择了一个对编程新手比较简单的小游戏贪吃蛇,希望以此实验给这门课一个总结。
2.实验过程
从网络上查询可知,要编写一个小游戏程序,首先应该安装pycharm程序包,所以在正式实验之前先做好前期准备工作,刚开始忘了安装pycharm也是出现了未知的变量错误。
紧接着就是对游戏中的一些基本数据进行设定,首先是游戏的界面大小和背景颜色,这些数据可以根据本人游玩的需要进行更改,在设置完基本的背景之后就是对蛇和食物进行设定,对蛇而言有头,身体以及移动速度都是关键;对于食物而言,食物的大小和位置很重要,在这里把食物大小设置为固定值,在此基础上改进可以把食物大小随着难度增加逐渐变小(设置为一个区间),这里为了降低难度还是保留固定值。
在完成蛇和食物的设定后就是游戏开始和结束的设置,通常这种开始和结束的控制都是通过循环语句实现的,对于游戏结束,可以设置得分胜利,也可以是特定条件,比如蛇头碰到身子,蛇头撞到游戏屏幕边界。
通过一个while—if循环来实现蛇的操控,通过键盘的上下左右来操控蛇的移动,从而完成游戏的基本框架搭建,到此游戏的操作和基本事件已经成型。在此基础上基于蛇是否吃到食物来记录得分,这样的话可以让游戏更具有游玩性。
最后,制作游戏的界面,完成游戏的简单制作。
3.运行视频
4源代码
import pygame
import random
pygame.init()
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('贪吃蛇')
background = (255, 255, 255)
snake_head = [280, 200]
snake_body = [[280, 200], [260, 200], [240, 200]]
snake_color = (0, 0, 0)
snake_speed = 10
direction = 'right'
food_pos = [360, 280]
food_color = (255, 0, 0)
food_size = 10
score = 0
running = True
clock = pygame.time.Clock()
def game_over():
font = pygame.font.Font(None, 50)
text = font.render('Game Over', True, (255, 0, 0))
screen.blit(text, (250, 200))
pygame.display.update()
pygame.time.delay(2000)
pygame.quit()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and direction != 'down':
direction = 'up'
elif event.key == pygame.K_DOWN and direction != 'up':
direction = 'down'
elif event.key == pygame.K_LEFT and direction != 'right':
direction = 'left'
elif event.key == pygame.K_RIGHT and direction != 'left':
direction = 'right'
if direction == 'up':
snake_head[1] -= snake_speed
elif direction == 'down':
snake_head[1] += snake_speed
elif direction == 'left':
snake_head[0] -= snake_speed
elif direction == 'right':
snake_head[0] += snake_speed
snake_body.insert(0, list(snake_head))
if snake_head == food_pos:
food_pos = [random.randrange(1, width/food_size) * food_size,
random.randrange(1, height/food_size) * food_size]
score += 10
else:
snake_body.pop()
screen.fill(background)
font = pygame.font.Font(None, 30)
text = font.render(f'Score: {score}', True, (0, 0, 0))
screen.blit(text, (10, 10))
pygame.draw.rect(screen, food_color, pygame.Rect(food_pos[0], food_pos[1],
food_size, food_size))
for pos in snake_body:
pygame.draw.rect(screen, snake_color, pygame.Rect(pos[0], pos[1],
snake_speed, snake_speed))
if snake_head[0] < 0 or snake_head[0] > width - snake_speed or
snake_head[1] < 0 or snake_head[1] > height - snake_speed or
snake_head in snake_body[1:]:
game_over()
pygame.display.update()
clock.tick(10)
pygame.quit()
三、实验中遇到的问题和解决过程
问题1:在输入代码的过程中漏掉一些关键符号,比如:!
问题1解决方法:在程序报错时及时去寻找问题,重新检查一遍,运用调试看看程序运行到哪一步出现问题。
问题2:pygame没有提前下载,导致最后程序无法运行。
问题2解决方法:在程序完成后发现没有安装pygame,重新安装,问题解决。
四、感悟思考
课程总结与感悟:
对于我这个此前从未接触编程的新手小白而言,王老师的《Python程序设计入门》课让我对Python这个语言有了一个全新的了解与认识,从一开始懵懂无知到现在略有了解,虽不能说全部都学会了,但是每节课都有在认真听讲,听不懂的也是通过手机视频录制下来在实验的时候拿出来看看。学习Python不仅是这个编程语言,其实更多的也是培养自己各方面的能力,系统思维,逻辑推理,错误排查......在这个过程中老师还让我们英语坚持打卡,自己的英语单词在这学期又多积累1500个,这也是这个课程带来的收获之一。每次实验总要遇到一系列问题,可能反反复复就是搞不定,这固然给人一种失落,但是通过自己的摸索,在完成实验的那一刻长舒一口气,看到程序正常运行,也会有很大的成就感,我想这也是编程的魅力吧,去创造无限的可能。这门课还是给大家都带来了快乐和感动,给王老师大大的赞。
课程建议:
希望老师能保持这种教学的风格,对向我们这样的文科生一样友好,上课时多多与学生互动,了解大家的情况(文科生很多理科知识欠缺)这样师生在学习上就可以更好“双向奔赴”了。最后由衷感谢老师,给这门课赋予了灵魂。