课程:《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综合实践的更多相关文章

  1. Python程序设计实验报告四:循环结构程序设计(设计型实验)

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2020.4.8     指导老师       修宇 [实验名称 ...

  2. PYTHON程序设计实验

    Python程序设计实验报告一: 熟悉IDLE和在线编程平台 安徽工程大学 Python程序设计实验报告 班级 物流191 姓名 邹缕学号 3190505117成绩 ▁▁▁ 日期 2020.3.5 指 ...

  3. Python程序设计实验报告二:顺序结构程序设计(验证性实验)

      安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩 日期     2020.3.22     指导老师       修宇 [实验 ...

  4. Python程序设计实验报告一:熟悉IDLE和在线编程平台

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩_____           日期     2020.3.8     指导老师  ...

  5. Python程序设计 实验 1 熟悉 IDLE 和在线编程平台

    ------------恢复内容开始------------ 安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2 ...

  6. Python程序设计实验报告三:分支结构程序设计

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2020.4.5     指导老师       修宇 [实验目的 ...

  7. 实验四 Python综合实践

    课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...

  8. 20172314 Android程序设计 实验四

    课程:<程序设计与数据结构> 班级: 1723 姓名: 方艺雯 学号:20172314 实验教师:王志强 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容及要求 (1)An ...

  9. .NET程序设计实验四

    实验四  文件操作 一.实验目的 1. 掌握窗口控件的使用方法: 2. 掌握文件系统的操作方法.File 类和 Directory类的使用. 二.实验要求 根据要求,编写 C#程序,并将程序代码和运行 ...

  10. python面试题四:Python web框架

    1 django.flask.tornado框架的比较? 2 什么是wsgi? WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具体的来说, ...

随机推荐

  1. uniapp for显示数据改变时,绑定的list值同时改变

    <template> <view class="container"> <uni-table> <uni-tr v-for="( ...

  2. pgsql的round函数

    不知道是我菜还是咋地,感觉pg里面用round不是很爽啊,明明在其他库能运行的,字段类型卡得太死了吧 照说float8类型还是数值,怎么就报错呢,如下 错误:  函数 round(double pre ...

  3. Python学习笔记组织文件之用zipfile模块压缩文件

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  4. python将知识图谱的节点关系(CSV或其他格式)转换成Echarts所需的json格式

    python将知识图谱的节点关系(CSV或其他格式)转换成Echarts所需的json格式 前言: 1. 此代码以如下(CSV)格式的数据为例, 故事 时间 地点 人物 xx 2020 安徽合肥 小戈 ...

  5. LOD Group

    LOD Group 调节摄像机距离,在不同的距离显示不同物体.常用于物体高低模之间的转换,如离摄像机较远时渲染低模物体,离摄像机较近时渲染高模物体.

  6. 51nod1355

    没啥意思的板子题. 首先,众所周知, \[\gcd\{f_a,f_b\}=f_{\gcd\{a,b\}} \] 所以考虑将 \(\operatorname{lcm}\) 转化为 \(\gcd\). \ ...

  7. leetcode 655. 输出二叉树 【时间击败100.00%】 【内存击败96.49%】

    1 public List<List<String>> printTree(TreeNode root) { 2 ArrayList<List<String> ...

  8. 无法加载文件 D:\lunwen\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。visual code页面vue ui启动失败

    报如下错误 解决方法: 1.以管理员身份运行 Windows PowerShell(管理员)点击win键 搜索powershell 点击以管理员身份运行 如下图所示 2.输入 set-Executio ...

  9. Unity 纯C# 完成 APK从下载到 自安装

    最简单的就是用androidStudio 进行编辑,打个aar 包,在Unity中调用方法,很便捷以下内容均转载Unity论坛,Android API24版本下可用,android API 24以上版 ...

  10. 三种将list转换为map的方法

    1) 传统方法假设有某个类如下 Java代码 class Movie { private Integer rank; private String description; public Movie( ...