课程:《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. iOS MacOS 系统时间(时间戳)格式化

    #pragma mark -原始数据是20220608155116,加工成2022/06/08 15:51:16 -(NSString *)timeString:(NSString *)toIndex ...

  2. AI大模型学习了解

    # 百度文心 上线时间:2019年3月 官方介绍:https://wenxin.baidu.com/ 发布地点: 参考资料: 2600亿!全球最大中文单体模型鹏城-百度·文心发布 # 华为盘古 上线时 ...

  3. wpf treeview 绑定图标方式

    <TreeView Grid.Row="0" Grid.Column="0" x:Name="foldersItem" Selecte ...

  4. homebrew 安装node 切换node版本

    注意:如果之前使用brew install node安装过node,需要先执行brew unlink node来'解绑'node 1.查找可用的node版本 brew search node 2.安装 ...

  5. 像MIUI一样做Zabbix二次开发(1)——MIUI之于Android,乐维监控之于Zabbix

    摘要 文章主要介绍:7年做Zabbix二次开发,讲述那些从技术方向的选择,到开发.架构设计.深度定制,到我们的更多前瞻性想法. 关于MIUI "专注.极致.口碑.快"成了雷布斯的口 ...

  6. pgsql 查询结果转换为json数组

    select array_to_json(array_agg(row_to_json(t))) from (SELECT * FROM test) t

  7. 2020ICPC上海I - Sky Garden

    思维 [I-Sky Garden_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海)(重现赛)@hzy0227 (nowcoder.com)](https://codeforces.co ...

  8. PostgreSQL Win10 安装、创建表并添加数据(安装细节+常见错误避坑)

    1.下载:postgresql-14.5-1-windows-x64.exe 地址:Download PostgreSQL 2.安装: 下一步即可,注意记住期间设置的超级管理员密码和设置的端口号 安装 ...

  9. VS2010运行opencv的程序,出现“应用程序无法正常启动0xc000007b”的解决方法

    问题描述 当我们在用vs2010对工程进行编译结束后,并且生成了可执行文件时,但是运用时却出现了"应用程序无法正常启动0xc000007b" 解决方法 这个通常是有一些动态链接库没 ...

  10. Authentication is required to set the network proxy

    在使用VNC访问集群的时候,总是弹出"Authentication is required to set the network proxy used for downloading pac ...