20193314白晨阳《Python程序设计》实验四 Python综合实践
课程:《Python程序设计》
班级: 1933
姓名: 白晨阳
学号:20193314
实验教师:王志强老师
实验日期:2021年6月13日
必修/选修: 公选课
实验内容:
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
实验要求:
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。10分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。5分
实验过程:
1:下面是一个爬虫的程序代码:
rom bs4 import BeautifulSoup
import re
import sys
import urllib
import xlwt
import sqlite3
def main():
'''主程序'''
baseurl = "https://movie.douban.com/top250?start="
datalist = getData(baseurl)
savepath = '豆瓣电影top250.xls'
saveData(savepath, datalist)
def askURL(url):
'''访问URL'''
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
}
req = urllib.request.Request(url=url, headers=headers)
html = ""
try:
response = urllib.request.urlopen(req)
html = response.read().decode("utf-8")
return html
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
def getData(baseurl):
'''获取数据'''
findLink = re.compile(r'')
findImg = re.compile(r'<img.src="(.?)"', re.S)
findTitle = re.compile(r'(.)')
findRating = re.compile(r'(.)')
findJudge = re.compile(r'(\d)人评价')
findInq = re.compile((r'(.)'))
findBd = re.compile(r'
', re.S)
datalist = []
for i in range(0, 11):
url = baseurl + str(i * 25)
html = askURL(url)
soup = BeautifulSoup(html, "html.parser")
for item in soup.find_all('div', class_="item"):
# print(item)
movie_data = []
item = str(item)
link = re.findall(findLink, item)[0]
movie_data.append(link)
img = re.findall(findImg, item)[0]
movie_data.append(img)
title = re.findall(findTitle, item)
if (len(title) == 2):
ctitle = title[0]
movie_data.append(ctitle)
otitle = title[1].replace("/", "")
movie_data.append(otitle)
else:
movie_data.append(title[0])
movie_data.append("")
rating = re.findall(findRating, item)[0]
movie_data.append(rating)
judge = re.findall(findJudge, item)[0]
movie_data.append(judge)
inq = re.findall(findInq, item)
if (len(inq) != 0):
inq = inq[0].replace("。", "")
movie_data.append(inq)
else:
movie_data.append("")
bd = re.findall(findBd, item)[0]
bd = re.sub('<br(\s+)?/>(\s+)?', "", bd)
bd = re.sub("/", "", bd)
movie_data.append(bd.strip())
datalist.append(movie_data)
# print(datalist)
return datalist
def saveData(savepath, datalist):
'''保存数据'''
workbook = xlwt.Workbook(encoding="utf-8", style_compression=0)
worksheet = workbook.add_sheet("豆瓣电影Top250", cell_overwrite_ok=True)
col = ("电影详情链接", "图片链接", "电影中文名", "电影外文名", "评分", "评价数", "描述", "相关信息")
for i in range(0, 8):
worksheet.write(0, i, col[i])
for i in range(0, 250):
# print("第%条" %(i+1))
data = datalist[i]
for j in range(0, 8):
worksheet.write(i + 1, j, data[j])
workbook.save('豆瓣电影top250.xls')
if name == 'main':
'''程序入口'''
main()

2:下面是一个贪吃蛇的小游戏:
程序如下:
def main():
pygame.init()
snake_speed_clock = pygame.time.Clock()
screen = pygame.display.set_mode((windows_width, windows_height))
screen.fill(white)
pygame.display.set_caption("贪吃蛇~")
show_start_info(screen)
while True:
music()
running_game(screen, snake_speed_clock)
show_end_info(screen)
def running_game(screen,snake_speed_clock):
start_x = random.randint(3, map_width - 8) ##开始位置
start_y = random.randint(3, map_height - 8)
snake_coords = [{'x': start_x, 'y': start_y}, ##初始贪吃蛇
{'x': start_x - 1, 'y': start_y},
{'x': start_x - 2, 'y': start_y}]
direction = RIGHT ##开始时向右移动
food = get_random_location() ##实物随机位置
while True:
for event in pygame.event.get():
if event.type == QUIT:
terminate()
elif event.type == KEYDOWN:
if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:
direction = LEFT
elif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:
direction = RIGHT
elif (event.key == K_UP or event.key == K_w) and direction != DOWN:
direction = UP
elif (event.key == K_DOWN or event.key == K_s) and direction != UP:
direction = DOWN
elif event.key == K_ESCAPE:
terminate()
move_snake(direction, snake_coords) ##移动蛇
ret = snake_is_alive(snake_coords)
if not ret:
gameover_music()
break ##蛇死了. 游戏结束
snake_is_eat_food(snake_coords, food) ##判断蛇是否吃到食物
screen.fill(BG_COLOR)
draw_snake(screen, snake_coords)
draw_food(screen, food)
show_score(screen, len(snake_coords) - 3)
pygame.display.update()
snake_speed_clock.tick(snake_speed) ##控制fps
def draw_food(screen, food):
x = food['x'] * cell_size
y = food['y'] * cell_size
appleRect = pygame.Rect(x, y, cell_size, cell_size)
pygame.draw.rect(screen, red, appleRect)
def draw_snake(screen, snake_coords):
for coord in snake_coords:
x = coord['x'] * cell_size
y = coord['y'] * cell_size
wormSegmentRect = pygame.Rect(x,y,cell_size,cell_size)
pygame.draw.rect(screen, dark_blue, wormSegmentRect)
wormInnerSegmentRect = pygame.Rect(x+4,y+4,cell_size - 8, cell_size - 8)
pygame.draw.rect(screen, blue, wormInnerSegmentRect)
def move_snake(direction, snake_coords):
if direction == UP:
newHead = {'x':snake_coords[HEAD]['x'], 'y':snake_coords[HEAD]['y'] - 1}
elif direction == DOWN:
newHead = {'x':snake_coords[HEAD]['x'], 'y':snake_coords[HEAD]['y'] + 1}
elif direction == LEFT:
newHead = {'x':snake_coords[HEAD]['x'] - 1, 'y':snake_coords[HEAD]['y']}
elif direction == RIGHT:
newHead = {'x':snake_coords[HEAD]['x'] + 1, 'y':snake_coords[HEAD]['y']}
snake_coords.insert(0, newHead)
def snake_is_alive(snake_coords):
tag = True
头坐标超出地图范围
if(snake_coords[HEAD]['x'] == -1
or snake_coords[HEAD]['x'] == map_width
or snake_coords[HEAD]['y'] == -1
or snake_coords[HEAD]['y'] == map_height):
tag = False
头坐标等于身体某节坐标
for snake_body in snake_coords[1:]:
if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']:
tag = False
return tag
def snake_is_eat_food(snake_coords, food):
if(snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']):
## 重新生成食物
food['x'] = random.randint(0, map_width - 1)
food['y'] = random.randint(0, map_height - 1)
else:
del snake_coords[-1] ##如果没有吃到实物, 就向前移动, 那么尾部一格删掉
def get_random_location():
return {'x':random.randint(0, map_width - 1),'y':random.randint(0, map_height - 1)}
def show_start_info(screen):
创建Font字体对象,使用render方法写字
font = pygame.font.Font("simsun.ttc", 40)
tip = font.render('按任意键开始游戏', True,(65,105,255))
加载图片
gamestart = pygame.image.load('startlogo.jpg').convert()
通过blit方法输出在屏幕上
screen.blit(gamestart,(140, 30))
screen.blit(tip,(240, 550))
刷新屏幕
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == QUIT:
terminate()
elif event.type == KEYDOWN: ##任意键按下
return
if (event.key == K_ESCAPE): ##若为ESC,则终止程序
terminate()
else:
return
def show_end_info(screen):
font = pygame.font.Font("simsun.ttc", 40)
tip = font.render("按ESC退出游戏,按任意键重新开始游戏",True,(65,105,255))
gamestart = pygame.image.load('gameover.png')
screen.blit(gamestart,(60, 0))
screen.blit(tip,(80, 300))
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == QUIT:
terminate()
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
terminate()
else:
return
def show_score(screen, score):
font = pygame.font.Font("simsun.ttc", 30)
scoreSurf = font.render("得分:%s" % score, True, green)
scoreRect = scoreSurf.get_rect()
scoreRect.topleft = (windows_width - 120, 10)
screen.blit(scoreSurf,scoreRect)
def terminate():
pygame.quit()
sys.exit()
实验结果:


实验问题:
问题1:编程能力不是很强
解决方案:在网上查资料和同学的帮助下解决(本次实验的贪吃蛇并非原创,而是在同学的基础的再加创新,解决了他以前一些漏洞)
问题2:部分程序模块没有
解决方案:去网页下载,用pycharm下载
问题3:贪吃蛇还有一些问题尚未解决(贪吃蛇的图片加载问题处理不了,未找到问题源头)
建议:
1:我觉得老师在上课的时候不必讲太多的硬性知识,应该侧重例子展示。
2:课上的例子我觉得可以结合一些热门来达到更好的效果,提高同学们注意力。
3:我觉得老师应该多布置一下作业,还有布置一下预习课程,这样课堂效果会提高一点
4:老师可以排一下位置,这样就可以不浪费宝贵的上课时间在考勤上了
5:老师上课可以多等等,保证学生都跟上
实验感想
在这里要感谢一下王志强老师,谢谢你把我带进python的大门,充实了我的课外生活,现在我每天都会去学习一点python小知识,感觉每天都过得充实而有趣,而且在与c语言的对比下,python显得更加简单可入门,但功能齐全。师父领进门,修行在个人,在接下来的时光中,我相信python会给我巨大的惊喜,我也将在python的道路上继续前行。
20193314白晨阳《Python程序设计》实验四 Python综合实践的更多相关文章
- Python程序设计实验报告四:循环结构程序设计(设计型实验)
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 姚彩琴 学号3190505129 成绩 日期 2020.4.8 指导老师 修宇 [实验名称 ...
- PYTHON程序设计实验
Python程序设计实验报告一: 熟悉IDLE和在线编程平台 安徽工程大学 Python程序设计实验报告 班级 物流191 姓名 邹缕学号 3190505117成绩 ▁▁▁ 日期 2020.3.5 指 ...
- Python程序设计实验报告二:顺序结构程序设计(验证性实验)
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 崔攀 学号3190505136 成绩 日期 2020.3.22 指导老师 修宇 [实验 ...
- Python程序设计实验报告一:熟悉IDLE和在线编程平台
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 崔攀 学号3190505136 成绩_____ 日期 2020.3.8 指导老师 ...
- Python程序设计 实验 1 熟悉 IDLE 和在线编程平台
------------恢复内容开始------------ 安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 姚彩琴 学号3190505129 成绩 日期 2 ...
- Python程序设计实验报告三:分支结构程序设计
安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 姚彩琴 学号3190505129 成绩 日期 2020.4.5 指导老师 修宇 [实验目的 ...
- 实验四 Python综合实践
课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...
- 20172314 Android程序设计 实验四
课程:<程序设计与数据结构> 班级: 1723 姓名: 方艺雯 学号:20172314 实验教师:王志强 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容及要求 (1)An ...
- .NET程序设计实验四
实验四 文件操作 一.实验目的 1. 掌握窗口控件的使用方法: 2. 掌握文件系统的操作方法.File 类和 Directory类的使用. 二.实验要求 根据要求,编写 C#程序,并将程序代码和运行 ...
- python面试题四:Python web框架
1 django.flask.tornado框架的比较? 2 什么是wsgi? WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具体的来说, ...
随机推荐
- uniapp for显示数据改变时,绑定的list值同时改变
<template> <view class="container"> <uni-table> <uni-tr v-for="( ...
- pgsql的round函数
不知道是我菜还是咋地,感觉pg里面用round不是很爽啊,明明在其他库能运行的,字段类型卡得太死了吧 照说float8类型还是数值,怎么就报错呢,如下 错误: 函数 round(double pre ...
- Python学习笔记组织文件之用zipfile模块压缩文件
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- python将知识图谱的节点关系(CSV或其他格式)转换成Echarts所需的json格式
python将知识图谱的节点关系(CSV或其他格式)转换成Echarts所需的json格式 前言: 1. 此代码以如下(CSV)格式的数据为例, 故事 时间 地点 人物 xx 2020 安徽合肥 小戈 ...
- LOD Group
LOD Group 调节摄像机距离,在不同的距离显示不同物体.常用于物体高低模之间的转换,如离摄像机较远时渲染低模物体,离摄像机较近时渲染高模物体.
- 51nod1355
没啥意思的板子题. 首先,众所周知, \[\gcd\{f_a,f_b\}=f_{\gcd\{a,b\}} \] 所以考虑将 \(\operatorname{lcm}\) 转化为 \(\gcd\). \ ...
- leetcode 655. 输出二叉树 【时间击败100.00%】 【内存击败96.49%】
1 public List<List<String>> printTree(TreeNode root) { 2 ArrayList<List<String> ...
- 无法加载文件 D:\lunwen\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。visual code页面vue ui启动失败
报如下错误 解决方法: 1.以管理员身份运行 Windows PowerShell(管理员)点击win键 搜索powershell 点击以管理员身份运行 如下图所示 2.输入 set-Executio ...
- Unity 纯C# 完成 APK从下载到 自安装
最简单的就是用androidStudio 进行编辑,打个aar 包,在Unity中调用方法,很便捷以下内容均转载Unity论坛,Android API24版本下可用,android API 24以上版 ...
- 三种将list转换为map的方法
1) 传统方法假设有某个类如下 Java代码 class Movie { private Integer rank; private String description; public Movie( ...