ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

20191204 2020-2021-2 《Python程序设计》实验四报告

2021-06-13 15:32:24  阅读:253  来源: 互联网

标签:direction Python screen url 贪吃蛇 2020 20191204 event snake


20191204 2020-2021-2 《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 1912
姓名: 李浩鹏
学号:20191204
实验教师:王志强
实验日期:2021年6月01日
必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)

批阅:注意本次实验不算做实验总分,前三个实验每个实验10分,累计30分。本次实践算入综合实践,打分为25分。
评分标准:
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。10分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。5分

2. 实验过程及结果

网页爬虫

爬虫网站:https://movie.douban.com/top250?start=0&filter=

1.获取url:

通过观察页面获取url地址的规律以及总的页码数:构造url地址的列表。
观察发现每一个页面的url地址的区别,发现它有以start=“(页面数-1)*25”这样的规律。



由此构造函数

#url中间值
url_temp = "https://movie.douban.com/top250?start={}&filter="

def get_url_list():
    url_list =[url_temp.format(i*25) for i in range(0,10)]
    return url_list

2.发送请求,获取响应

3.提取数据

  response.encoding = response.apparent_encoding
        html = BeautifulSoup(response.text, features='lxml')

关于电影评分的部分

4.保存数据

picture_url = picture_src
picture_response = requests.get(url=picture_url)

运行截图


贪吃蛇(参考)

1、一些游戏窗口的初始化工作,以及调用相关函数运行游戏。

#主函数
 def main():
     pygame.init() # 模块初始化
     snake_speed_clock = pygame.time.Clock() # 创建Pygame时钟对象
     screen = pygame.display.set_mode((windows_width, windows_height)) #
     screen.fill(white)
 
     pygame.display.set_caption("Python 贪吃蛇小游戏") #设置标题
     show_start_info(screen)               #欢迎信息
     while True:
         running_game(screen, snake_speed_clock)
        show_gameover_info(screen)

pygame.display.set_mode((windows_width, windows_height))

生成windows窗口,pygame.display.set_mode(resolution=(0,0),flags=0,depth=0)。返回的是一个surface对象(surface对象是用于表示图像的图像,只要指定尺寸,就可以利用),resolution可以控制生成windows窗口的大小,flags代表的是扩展选项,depath不推荐设置。

screen.fill(white)
pygame.surface.fill(color),对窗口背景颜色的填充。

2、游戏主要功能

游戏运行主体

2def running_game(screen,snake_speed_clock):
3    startx = random.randint(3, map_width - 8) #开始位置
4    starty = random.randint(3, map_height - 8)
5    snake_coords = [{'x': startx, 'y': starty},  #初始贪吃蛇
6                  {'x': startx - 1, 'y': starty},
7                  {'x': startx - 2, 'y': starty}]
8
9    direction = RIGHT       #  开始时向右移动
10
11    food = get_random_location()     #实物随机位置
12
13    while True:
14        for event in pygame.event.get():
15            if event.type == QUIT:
16                terminate()
17            elif event.type == KEYDOWN:
18                if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:
19                    direction = LEFT
20                elif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:
21                    direction = RIGHT
22                elif (event.key == K_UP or event.key == K_w) and direction != DOWN:
23                    direction = UP
24                elif (event.key == K_DOWN or event.key == K_s) and direction != UP:
25                    direction = DOWN
26                elif event.key == K_ESCAPE:
27                    terminate()
28
29        move_snake(direction, snake_coords) #移动蛇
30
31        ret = snake_is_alive(snake_coords)
32        if not ret:
33            break #蛇跪了. 游戏结束
34        snake_is_eat_food(snake_coords, food) #判断蛇是否吃到食物
35
36        screen.fill(BG_COLOR)
37        #draw_grid(screen)
38        draw_snake(screen, snake_coords)
39        draw_food(screen, food)
40        draw_score(screen, len(snake_coords) - 3)
41        pygame.display.update()
42        snake_speed_clock.tick(snake_speed) #控制fps

关于贪吃蛇
采用一个元组存储贪吃蛇身体各个部分的坐标(一条贪吃蛇不是由很多节组成的嘛)。最后再写个方法根据元组坐标把贪吃蛇画出来。

关于食物
同样做法。存坐标,最后画出来。

关于移动
监听键盘,根据用户按键,用direction变量记录移动方向。然后更新贪吃蛇元组里面的坐标(其实每次移动只用更新头尾就行)。最后统一画出来。移动做法具体是,我们把每次头部移动的新坐标插入贪吃蛇元组,然后删掉尾部一节。

开始阶段
先把贪吃蛇和食物的坐标随机生成,贪吃蛇一开始3节长,先设置向右移动。

移动我们的贪吃蛇
监听键盘,用户按下键盘只是改变direction的值,再用move_snake(direction, snake_coords)函数更新贪吃蛇坐标。如果不按,那direction值一直不变,贪吃蛇就一直向前走。

相关判断
要判断贪吃蛇是否挂了,表现为:

头坐标超出地图范围
头坐标等于身体某节坐标。

判断贪吃蛇是否吃到食物,表现为:
头坐标等于食物坐标,那么吃到食物。这时候注意,我们就不用删尾部一节了,因为吃到食物变长了嘛。
如果没有吃到食物,那么是正常移动,删掉尾部一节坐标。

3、运行截图

3. 实验过程中遇到的问题和解决过程

问题1:不会翻页操作,如果信息只是分布在一个网页上,还会处理,如果分布在多个网页上就不会了
问题1解决方案:百度了下,通过学习别人的经验并仔细观察各个页面之间的url的区别与联系,发现同一个系列的网页的url通常不会是完全不一样的,大多情况下存在着或多或少的联系,即url之间是相似的,这一系列url中很可能存在一个或几个特征值来进行彼此间的区分,我们只要抓住特征值的变化规律,就能通过规律构造函数,进而通过循环实现这一系列网站间的自动跳转访问、信息爬取。
如:豆瓣上就为(页码-1)*25
问题2:对于如何在网页之上找到自己想要信息那部分对应的html代码有些迷茫。
问题2解决方案:通过百度发现,在网页之上选取F12后,在页面的左上角有一个选取的标志,可以通过点亮这个标志后,选择自己想要的信息,系统会自动对准html中的代码。

码云链接

爬虫

snake

全课感悟

  本学期我们首先初识了python,了解了python的发展历程、未来前景和优势 。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

  在学习了基本的输入输出操作后,我们学习了基本数据类型:整数类型,四种进制表示形式、浮点类型。对python的计算有了初步的认识,并且在第一次实验中自己设计了一个功能强大的计算器。相信这个计算器对我以后的学习也会起到很大的帮助。

  之后又学习了有关字符串的操作字符串类型,单引号,双引号,都只能表示一行字符串,三单引号,形成的是多行字符串,但也可以当多行注释来使用。正向递增序号、反向递减序号,索引和切片[ : ],字符串的操作符,字符串处理函数,字符串处理”方法”字符串类型格式化等等。接着我们学习了python的分支语句(分支结构)if elif else 和循环语句(循环结构)while for continue break,这一部分感觉何c语言中的差别不大,只是形式不一样而已。
·在之后我们学习了序列,序列是 Python 中最基本的数据结构。序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推Python 有 6 个序列的内置类型,但最常见的是列表和元组。列表都可以进行的操作包括索引,切片,加,乘,检查成员。Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号 ( ),列表使用方括号 [ ]。元组创建也很简单,只需要在括号中添加元素,并使用逗号隔开即可。随后的下一节课学习了字典,字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 。最后学习的是集合,集合是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。通过3次课我们对这些结构的基本操作进行了深度的学习和了解,并且也通过实验二加强了对这些结构的掌握。也让我发现了这些结构的便捷。

  之后我们介绍了面向对象程序设计 三要素:封装、继承、多态 介绍了对象、类,class 如果类是盖楼的图纸,那么对象就是盖好的大楼__init__()方法,创建数据成员和方法并访问,访问限制。接下来我们学习python的模块,Modules 模块,提高代码重用性和可维护性,if name == 'main':的作用,Python包以及python的异常处理,try except else finally 。接着我们学习了socket套接字,自己感受了对服务器和客户端的模拟。最后就是网络爬虫,当初真的没想到python选修会讲到网络爬虫,虽然现在还不是很会,但我决定真的是太酷了。十分感谢老师领我并提供契机让我初识了网络爬虫。并且对爬虫技术有了一定的入门。

  首先我感觉我们的课程的不论是进度还是课程顺序的非常好,不仅从最基础的输入输出还是到之后的python的基本语法,还是最后的爬虫等技术,由浅及深,由表及里十分适合小白学习。因为我之前学过c语言,相比之下我觉得python的重大优势就在于庞大的第三方库。云班课的资料也非常丰富,但也同时考虑到了同学的水平差距和时间精力问题,没有做硬性要求,我觉得这也是很明智的。王老师上课也比较风趣幽默,课堂的内容也比较比较吸引人,我觉的这是区别的其他编程课程的优势。同时老师还积极鼓励我们背英语单词,这一点是别的选修所没有的,英语对于我们专业来说可以说是很重要的语言,但是由于大学以来没人督促,我的英语停滞不前,很感谢老师通过这种方式督促我们背英语单词,这对我本次的六级考试起到了很大的帮助。而且在答疑的过程中,老师指点我让我学会提问,学会利用百度搜索,让我受益匪浅。让我提建议的话,就是前面的特别基础的一些东西,例如输入输出,字符串,循环控制结构我觉得可以在压缩一下,从而腾出来时间给后面的比较有挑战的内容,如爬虫等。(这只代表我的看法,可能因为我有一定编程基础才会提出这样的想法)。
总之还是很感谢老师一学期的教导,真的是受益匪浅。

参考资料

标签:direction,Python,screen,url,贪吃蛇,2020,20191204,event,snake
来源: https://www.cnblogs.com/lhpshuaibi/p/14880353.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有