42
社区成员




实验四
学号 20224214 《Python程序设计入门》实验四报告
课程:《Python程序设计入门》
班级: 2242
姓名: ljr
学号:20224214
实验教师:wzq
实验日期:2023年5月20日
必修/选修: 专选课
一、实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
二、实验分析
1. 想法来源: 面对社会高速发展带来的全方位压力,年轻人在不断寻找一个出口,于是,“电子木鱼”走红网络,在现实生活中无法缓解释放的情绪通过“电子木鱼”得以缓解释放,在这个不确定的时代成为一种暂时的焦虑转移与情感寄托。于是,在查找资料及同学们的帮助下,制作了“电子木鱼”。
2. 完成功能:点击木鱼,“功德”自动上升加一
3. 代码实现:本次的电子木鱼主要采用了pygame这个包来实现点击加功德的功能,素材加载的实现部分使用了pygame.image.load将素材引入。
move移动函数实现功德图片向上飘
三、实验设计及过程
(一)实现“电子木鱼”的功能主要包括以下思路:
1.设置窗口大小,以及名称
2.自动读取文件包的素材图片(功德,木鱼,背景)
3.设置功德显示位置,以及设置木鱼图片的初始位置
4.设置功德上升的速度,以及控制功德移动
5.显示木鱼
6.设置移动函数
7.获取光标所在的位置
8.检测鼠标点击事件
(二)难点
设置移动函数与读取素材图片
四、实验结果与遇到的问题
通过查找资料、借鉴网上的思路、请教学长学姐等最终完成了“电子木鱼”的制作
(一)运行视频如下
(二)源代码如下
(三)问题及解决方案
问题1:pygame安装包无法正常安装
问题1解决方案:从网上查找资料解决安装问题
问题2:无法读取素材图片
问题2解决方案:图片命名与程序中读取的命名不一致,更改后恢复正常
问题3:移动函数部分报错
问题3解决方案:查找资料、询问学长学姐后对该部分函数有了更进一步的了解
五、其他,此外,在CSDN上学习了用Python画图,以小猪佩奇为例
运行视频如下
源代码如下
import time
import turtle as t
t.colormode(255)
t.color((255,155,192),"pink")
t.setup(840,500)
t.speed(10)
t.pu()
t.goto(-100,100)
t.pd()
t.seth(-30)
t.begin_fill()
a=0.4
for i in range(120):
if 0<=i<30 or 60<=i<90:
a=a+0.08
t.lt(3)
t.fd(a)
else:
a=a-0.08
t.lt(3)
t.fd(a)
t.end_fill()
t.pu()
t.seth(90)
t.fd(25)
t.seth(0)
t.fd(10)
t.pd()
t.pencolor(255,155,192)
t.seth(10)
t.begin_fill()
t.circle(5)
t.color(160,82,45)
t.end_fill()
t.pu()
t.seth(0)
t.fd(20)
t.pd()
t.pencolor(255,155,192)
t.seth(10)
t.begin_fill()
t.circle(5)
t.color(160,82,45)
t.end_fill()
t.color((255,155,192),"pink")
t.pu()
t.seth(90)
t.fd(41)
t.seth(0)
t.fd(0)
t.pd()
t.begin_fill()
t.seth(180)
t.circle(300,-30)
t.circle(100,-60)
t.circle(80,-100)
t.circle(150,-20)
t.circle(60,-95)
t.seth(161)
t.circle(-300,15)
t.pu()
t.goto(-100,100)
t.pd()
t.seth(-30)
a=0.4
for i in range(60):
if 0<=i<30 or 60<=i<90:
a=a+0.08
t.lt(3)
t.fd(a)
else:
a=a-0.08
t.lt(3)
t.fd(a)
t.end_fill()
t.color((255,155,192),"pink")
t.pu()
t.seth(90)
t.fd(-7)
t.seth(0)
t.fd(70)
t.pd()
t.begin_fill()
t.seth(100)
t.circle(-50,50)
t.circle(-10,120)
t.circle(-50,54)
t.end_fill()
t.pu()
t.seth(90)
t.fd(-12)
t.seth(0)
t.fd(30)
t.pd()
t.begin_fill()
t.seth(100)
t.circle(-50,50)
t.circle(-10,120)
t.circle(-50,56)
t.end_fill()
t.color((255,155,192),"white")
t.pu()
t.seth(90)
t.fd(-20)
t.seth(0)
t.fd(-95)
t.pd()
t.begin_fill()
t.circle(15)
t.end_fill()
t.color("black")
t.pu()
t.seth(90)
t.fd(12)
t.seth(0)
t.fd(-3)
t.pd()
t.begin_fill()
t.circle(3)
t.end_fill()
t.color((255,155,192),"white")
t.pu()
t.seth(90)
t.fd(-25)
t.seth(0)
t.fd(40)
t.pd()
t.begin_fill()
t.circle(15)
t.end_fill()
t.color("black")
t.pu()
t.seth(90)
t.fd(12)
t.seth(0)
t.fd(-3)
t.pd()
t.begin_fill()
t.circle(3)
t.end_fill()
#腮
t.color((255,155,192))
t.pu()
t.seth(90)
t.fd(-95)
t.seth(0)
t.fd(65)
t.pd()
t.begin_fill()
t.circle(30)
t.end_fill()
#嘴
t.color(239,69,19)
t.pu()
t.seth(90)
t.fd(15)
t.seth(0)
t.fd(-100)
t.pd()
t.seth(-80)
t.circle(30,40)
t.circle(40,80)
#身体
t.color("red",(255,99,71))
t.pu()
t.seth(90)
t.fd(-20)
t.seth(0)
t.fd(-78)
t.pd()
t.begin_fill()
t.seth(-130)
t.circle(100,10)
t.circle(300,30)
t.seth(0)
t.fd(230)
t.seth(90)
t.circle(300,30)
t.circle(100,3)
t.color((255,155,192),(255,100,100))
t.seth(-135)
t.circle(-80,63)
t.circle(-150,24)
t.end_fill()
#手
t.color((255,155,192))
t.pu()
t.seth(90)
t.fd(-40)
t.seth(0)
t.fd(-27)
t.pd()
t.seth(-160)
t.circle(300,15)
t.pu()
t.seth(90)
t.fd(15)
t.seth(0)
t.fd(0)
t.pd()
t.seth(-10)
t.circle(-20,90)
t.pu()
t.seth(90)
t.fd(30)
t.seth(0)
t.fd(237)
t.pd()
t.seth(-20)
t.circle(-300,15)
t.pu()
t.seth(90)
t.fd(20)
t.seth(0)
t.fd(0)
t.pd()
t.seth(-170)
t.circle(20,90)
#脚
t.pensize(10)
t.color((240,128,128))
t.pu()
t.seth(90)
t.fd(-75)
t.seth(0)
t.fd(-180)
t.pd()
t.seth(-90)
t.fd(40)
t.seth(-180)
t.color("black")
t.pensize(15)
t.fd(20)
t.pensize(10)
t.color((240,128,128))
t.pu()
t.seth(90)
t.fd(40)
t.seth(0)
t.fd(90)
t.pd()
t.seth(-90)
t.fd(40)
t.seth(-180)
t.color("black")
t.pensize(15)
t.fd(20)
#尾巴
t.pensize(4)
t.color((255,155,192))
t.pu()
t.seth(90)
t.fd(70)
t.seth(0)
t.fd(95)
t.pd()
t.seth(0)
t.circle(60,20)
t.circle(10,230)
t.circle(60,30)
六、实验体会
本次实验主要包括两个程序,一个是“电子木鱼”为本次实验的主要内容,一个是“小猪佩奇”为结合个人兴趣所制作的内容。两个程序对我来说难度都比较大,也遇到了各种各样的问题,比如素材格式错误、安装包无法正常安装等,但好在借助外在力量(查百度、问同学等)一步一步解决了,也做到真正看懂每一个步骤、每一行代码。在不断的更改、调试过程中也培养了自己的耐心。
在前期选题时其实是比较纠结的,不知道该做什么能既做到“创新”又能将难度控制在自己的能力范围之内,也尝试过编写“朋友圈自动点赞、蚂蚁森林自动偷能量”等,但是在最后连接手机时出现了问题导致并没有办法较好地运行程序,所以也一直在更换选题,但是不可否认的是,前期是失败的尝试也给我带来了很多收获,让我了解了更多新的函数、新的知识点,比如借助 Uiautomator2,可以实现自动化,简化了很多步骤。后期我也会将此次没有运行成功的程序加以改善和调整,争取让其成功运行。
其次,在编写程序过程中让我的逻辑能力和思维能力得到了加强,比如,在完成某个特定功能时需要在脑子里构建一个简易流程图,比如完成“电子木鱼”时,就需要思考首先要设置窗口大小,然后考虑读取素材图片,当预设的基本画面出现以后,要考虑点击“功德”的移动速度等以及最后整个程序如何结束,有了大框架以后再将每一个部分细化,思考应该用的函数等。
总之,本次实验是对过去课程的一个总结,也是对自身的查漏补缺,很感谢这次实验,让我又学习了很多新的知识,收获颇丰。
七、课程总结与建议
其实本学期选择Python也思考了很长时间、纠结了很长时间,一来是虽然自己是文科生,但是从来不希望自己受限于“文科”,二来是国家越来越重视学科交叉融合,所以希望自己也能躬身入局,学习更多知识,掌握更多技能。但是Python的客观难度又摆在面前,所以刚开始是有恐惧和不安在的,但是经过慎重的思考,还是选择了Python作为我本学期的专业选修课。希望自己能够不断走出舒适圈、触碰一些更具有挑战性任务。
但是所有恐惧与不安都随着老师的耐心讲解、课堂轻松活泼的氛围烟消云散了。从刚开始Python基本知识的讲解到自己制作猜数字小游戏、计算器的实践,每一步都有老师的鼓励和同学们的陪伴,也正是这些认真负责与点滴感动,让我在每一次被Python理论知识学习和实验报告“折磨”时能够重整旗鼓,继续前行。
整体来说这十二节课对我来收获还是比较大的,从刚开始完全“零基础”到慢慢能听懂一些专业术语,从跟着老师一行一行写代码到自己尝试编写简易的小程序,每一步都是突破,每一步都值得我感恩。虽然我也不能说每次课都能听懂,但也尽力在跟上老师的节奏,尽力去理解。当然还有每天的英语打卡,也让我收获了很多,强烈建议这个形式一直延续下去。
十二节课,有过困惑,有过焦虑,也有收获的成就感与满足感。总之,课程整体安排非常合理,但是有时候确实速度可能对我来说有点快(可能还是基础太薄弱了)可以稍稍稍慢一点点,或者在讲完一个板块之后留下几分钟思考或者提问的时间;然后是是有些专业词汇确实听不懂,也容易导致丧失听课的兴趣,所以可以适当讲解一下或者让同学们自由讨论、搜集资料等,调动积极性;其次是老师可以设置一定的奖惩制度,比如回答问题准确完整可以加分什么的,可以提升课堂参与度;最后是我觉得英语打卡和七创的学长学姐讲解的形式可以一直延续下去,感觉受获很大。
最后当然是要夸一夸温柔可爱的志强老师啦,对我们很温柔又很有耐心,减少了很多我学习Python的畏难情绪,总之,感谢相遇,也感谢老师一直以来的谆谆教导,期待下次上志强老师的课啦!