42
社区成员




20224215《Python程序设计入门》实验四综合实践报告
课程:《Python程序设计入门》
班级:2242
姓名:dj
学号:20224215
实验教师:wzq
实验日期:2023年6月2日
必修/选修:专选课
一、实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。课代表和各小组负责人收集作业(源代码、视频、综合实践报告)。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
二、实验过程及结果
1.实验设计:
本次综合实践我设计了一个猫和老鼠小游戏:游戏开始前设置一个开场背景,等待三秒后游戏开始。通过上下左右键控制老鼠jerry移动逃跑,猫tom随着jerry移动而移动,同时tom的移动轨迹会用蓝线标出来,使tom的移动轨迹更直观。tom追上jerry后游戏结束。游戏结束后页面显示“GAME OVER”和猫tom的形象,并同时显示游戏中老鼠jerry的存活时间。
2.实验步骤:
(1)创建一个游戏场所
导入turtle模块,创建一个游戏场所命名为playground,设置开场背景,“TOM&JERRY”字样居中对齐,字体颜色为棕色,字体大小为50号,加粗;在下方再写一行“READY?3,2,1,GO!”字样居中对齐,字体颜色为棕色,字体大小为20号,加粗。导入time模块,让屏幕沉睡三秒,三秒之后屏幕清空。
![]() |
![]() |
![]() |
(2)创造tom和jerry
设置两个turtle,分别代表tom和jerry,导入random工具包,使tom和jerry可以运动到屏幕上的任何一个地方。但现在tom和jerry在屏幕上只是两个箭头,为改变它们的形象,登陆网址“www.iconfont.cn”下载图标素材,选择一个猫和老鼠的形象,下载图片,将图片重新命名为“tom.gif”和“jerry.gif”,将这两个形象注册到playground中,不用写文件的路径名是因为代码文件和图片文件都在电脑桌面上,在同一个路径下。
![]() |
![]() |
![]() |
(3)用键盘控制jerry逃跑
用def定义函数,当按下“up”“down”“left”“right”键时jerry分别向上、下、左、右移动,并设置好移动角度
![]() |
![]() |
![]() |
(4)tom自动追逐,当tom追上jerry,jerry被抓住
引入while语句实现循环,引入判断语句if,当tom和jerry距离小于10的时候默认它们之间距离足够小,此时tom可一跃抓住jerry,最后屏幕清空。同时tom的移动轨迹会用蓝线标出来,使tom的移动轨迹更直观。
![]() |
(5)游戏结束,显示jerry逃跑了多少秒
游戏结束之后,屏幕显示“GAME OVER”字样,居中对齐,字体颜色为棕色,字体大小为50号,加粗;导入time模块,在下方再写一行“YOU SURVIVED SECONDS”来显示游戏中老鼠jerry的存活时间,字样居中对齐,字体颜色为棕色,字体大小为20号,加粗。引用stamp函数使tom的形象继续留在屏幕中央。
![]() |
3.实验结果
猫和老鼠小游戏源代码如下:
import turtle
import time
import random
import time
def up():
jerry.setheading(90)
jerry.forward(20)
def down():
jerry.setheading(270)
jerry.forward(20)
def left():
jerry.setheading(180)
jerry.forward(20)
def right():
jerry.setheading(0)
jerry.forward(20)
playground = turtle.Screen()
playground.register_shape('tom.gif')
playground.register_shape('jerry.gif')
playground.onkey(up,'Up')
playground.onkey(down,'Down')
playground.onkey(left,'Left')
playground.onkey(right,'Right')
playground.listen()
writer = turtle.Turtle()
writer.color('brown')
writer.hideturtle()
writer.penup()
writer.home()
writer.write("TOM & JERRY",align='center',font=("Comic Sans MS",50,'bold'))
writer.goto(0,-50)
writer.write("READY?3,2,1,GO!",align='center',font=("Comic Sans MS",20,'bold'))
time.sleep(3)
writer.clear()
tom = turtle.Turtle()
tom.shape('tom.gif')
tom.penup()
tom.goto(random.randint(-200,200),random.randint(-200,200))
tom.pendown()
tom.pensize(3)
tom.color('blue')
jerry = turtle.Turtle()
jerry.shape('jerry.gif')
jerry.speed(0)
jerry.penup()
jerry.goto(random.randint(-200,200),random.randint(-200,200))
jerry.color('brown')
start = time.time()
while True:
tom.setheading(tom.towards(jerry))
tom.forward(5)
if tom.distance(jerry) < 10:
end = time.time()
playground.clear()
jerry.goto(0, 0)
jerry.write("GAME OVER", align='center', font=("Comic Sans MS", 50, 'bold'))
jerry.goto(0, -50)
jerry.write("YOU SURVIVED {:.1f} SECONDS".format(end - start), align='center', font=("Comic Sans MS", 20, 'bold'))
tom.pu()
tom.goto(-50, -70)
tom.stamp()
jerry.pu()
jerry.goto(50, -70)
jerry.stamp()
time.sleep(2)
playground.bye()
break
游戏演示过程视频如下:
四、实验过程中遇到的问题和解决过程
问题一:在实验第一部分的时候运行时显示语法无效
解决方案:代码输入错误,“write”输入成“writer”,以及少了个括号
问题二:在实验第一部分的时候运行时显示没有定义名称‘random’
解决方案:python基础知识掌握不牢固,没有导入random模块
问题三:游戏结束之后字样显示的界面停留时间太短,一闪而过
解决方案:在老师的帮助下,增加“time.sleep()”和“payground.bye()”两行代码表示最后字样显示界面停留时间,并设置成“time.sleep(2)”,表示最后字样显示界面停留时间为2秒
五、实验感想
本次实验作为最后一个实验,需要将我们本学期学过的所有知识融会贯通并学以致用。我们要学会在互联网上检索信息,并且编辑代码的时候多细致一些。即使课程结束了,但我们对python的学习还远远不能结束,以后也要巩固自己的基础知识,努力把python变为自己的一项技能。
六、全课总结
1.课程感想体会:
在寒假选课之前,我就对即将学习的python这门自己从未接触过的编程语言感到忧心忡忡。但通过与老师交流以及开学后真正开始了Python程序入门这门课程的学习之后,老师自身专业能力很强以及性格好、对学生非常宽容等都会让像我这样对计算机编程语言等偏理科的学习感到天然的害怕的学生逐渐消解恐惧,尝试去探索发现其中的奥妙与乐趣。Python是一个强大又灵活的工具,在这个科技高度发展的时代,熟练运用python无疑会给我们的工作与生活带来极大的便利。
在理论课上老师悉心的讲解使我们了解了很多关于python的基础知识,如python的语法特点和函数等。在实验课上,通过基础理论与亲身实践相结合,我熟悉了python开发环境,练习python运行、调试技能,完成猜数字游戏的编写,学会了设计简单的计算器,最后还和同学一起协作,学会了创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。在学习python程序设计入门这门课程的过程上,尽管困惑与无助也常常与我相伴,听不懂的状况时有发生,也忘不了每到八九点困意袭来但仍要努力举着手机把每节课录下来以便我自己回顾复习的小小崩溃感,但当弄懂一个公式或成功运行一串代码之后,那种成就感是无可比拟的。我们在学习python的过程中不仅要注重公式等的积累及运用,在代码编写的时候也要细心,在练习和不断学习的过程中提升自我。同时我最大的收获是,在经过认真的思考之后不明白的知识点要学会勇敢的去寻求帮助,当我们寻求帮助时老师和同学们都会热情积极地伸以援手,这样我们的问题才能得到更高效的解决。
2.对课程的意见和建议:
老师的专业素质与能力一定是毋庸置疑的,但学生和老师对同一节课的体会其实也存在差异,我们从学生的角度根据自身的体会提出自己对这门课程的看法与建议,希望和老师一起进步。
①其实就像最后一节课上大部分同学提的建议一样,老师可以在讲到课程重点的时候语气加重,或者多强调几遍,引起同学们的重视。
②每节理论课结束后老师可以把本节课的重点内容通过小问题的形式发到微信群里提醒同学们回顾复习,每节课的上课内容一目了然,这样下节课上课老师提问时同学们都答不上来的情况应该会有所改善。
③在理论课之后老师可以留一些关于这节理论课学习内容的实践小作业,有利于同学们学以致用。
说实话真的很喜欢老师的教学风格,很真诚的维护我们每一个人的自尊心,在我们答不上来问题的时候也是最大程度的表达理解,我们都能感受到老师真的很用心在上每一节课。我觉得Python这门课作为文科的专选课由王老师来上真的真的是一个很正确的决定,也是我们的幸运!以上的建议这些都是我自己的一些小小拙见,衷心的希望这门课越办越好,也祝王老师万事胜意!