93
社区成员




课程:《Python程序设计》
班级: 2242
姓名: 郑楷隆
学号:20224210
实验教师:王志强
实验日期:2024年5月14日
必修/选修: 专选课
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
本次实验做了三个实验分别是:1、编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。(失败)
2、用python画一只小熊猫
3、编写小游戏:贪吃蛇
实验一:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。(失败)
我们可以使用新浪微博作为数据源,来实现舆情监控或情感分析。
步骤 2: 编写爬虫脚本
import requests
from snownlp import SnowNLP
import matplotlib.pyplot as plt
def fetch_weibo_data():
url = 'https://s.weibo.com/top/summary?cate=realtimehot'
response = requests.get(url)
if response.status_code == 200:
# 提取热门话题
hot_topics = response.json()['data']['list']
# 获取第一个话题的微博列表
if hot_topics:
topic_url = hot_topics[0]['scheme']
topic_response = requests.get(topic_url)
if topic_response.status_code == 200:
# 提取微博内容
weibo_content = topic_response.json()['data']['cards'][1]['card_group']
return [weibo['mblog']['text'] for weibo in weibo_content]
return None
def analyze_sentiments(weibo_data):
sentiments = []
for text in weibo_data:
s = SnowNLP(text)
sentiments.append(s.sentiments)
return sentiments
# 获取微博数据
weibo_data = fetch_weibo_data()
# 分析情感
if weibo_data:
sentiments = analyze_sentiments(weibo_data)
# 绘制情感分析结果的直方图
plt.hist(sentiments, bins=10)
plt.title('Sentiment Analysis of Top Weibo Topics')
plt.xlabel('Sentiment Score')
plt.ylabel('Number of Posts')
plt.show()
else:
print("Failed to fetch Weibo data.")
实验结果:失败
结果如下:
源代码
import matplotlib.pyplot as plt
def draw_panda():
body = plt.Circle((0.5, 0.5), 0.4, color='black')
plt.gca().add_patch(body)
left_ear = plt.Circle((0.3, 0.8), 0.1, color='black')
plt.gca().add_patch(left_ear)
right_ear = plt.Circle((0.7, 0.8), 0.1, color='black')
plt.gca().add_patch(right_ear)
left_eye_white = plt.Circle((0.4, 0.6), 0.08, color='white')
plt.gca().add_patch(left_eye_white)
right_eye_white = plt.Circle((0.6, 0.6), 0.08, color='white')
plt.gca().add_patch(right_eye_white)
left_eye_pupil = plt.Circle((0.4, 0.6), 0.04, color='black')
plt.gca().add_patch(left_eye_pupil)
right_eye_pupil = plt.Circle((0.6, 0.6), 0.04, color='black')
plt.gca().add_patch(right_eye_pupil)
left_hand = plt.Rectangle((0.2, 0.3), 0.1, 0.2, color='black')
plt.gca().add_patch(left_hand)
right_hand = plt.Rectangle((0.7, 0.3), 0.1, 0.2, color='black')
plt.gca().add_patch(right_hand)
if __name__ == "__main__":
draw_panda()
plt.axis('scaled')
plt.axis('off')
plt.show()
分析
导入 Matplotlib 库:首先导入了 Matplotlib 库,这是一个用于绘制图表和图形的 Python 库。
定义绘制函数:
draw_panda()
:绘制小熊猫的各个部分,包括身体、耳朵、眼睛和手臂等。绘制小熊猫图像:
draw_panda()
函数中,使用 Matplotlib 库的基本图形函数来绘制小熊猫的各个部分,例如圆形和矩形。plt.gca().add_patch()
函数将每个图形添加到当前绘图区域。主函数:
if __name__ == "__main__":
:这是 Python 的惯用写法,表示当代码作为主程序执行时,以下代码块将会被执行。draw_panda()
函数绘制小熊猫图像。plt.axis('scaled')
设置坐标轴比例为1:1,以保证绘制出的图像不会出现拉伸或压缩。plt.axis('off')
关闭坐标轴,使绘制出的图像不显示坐标轴。plt.show()
显示绘制出的小熊猫图像成果如下:
实验分析及设计:
源代码
import pygame
import time
import random
pygame.init()
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
dis_width = 800
dis_height = 600
dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption('Snake Game by Edureka')
clock = pygame.time.Clock()
snake_block = 10
snake_speed = 30
font_style = pygame.font.SysFont(None, 50)
def message(msg, color):
mesg = font_style.render(msg, True, color)
dis.blit(mesg, [dis_width / 6, dis_height / 3])
def gameLoop():
game_over = False
game_close = False
x1 = dis_width / 2
y1 = dis_height / 2
x1_change = 0
y1_change = 0
snake_List = []
Length_of_snake = 1
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
while not game_over:
while game_close == True:
dis.fill(blue)
message("You Lost! Press Q-Quit or C-Play Again", red)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block
x1_change = 0
if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
dis.fill(blue)
pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
snake_Head = []
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
if len(snake_List) > Length_of_snake:
del snake_List[0]
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
for segment in snake_List:
pygame.draw.rect(dis, black, [segment[0], segment[1], snake_block, snake_block])
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
Length_of_snake += 1
clock.tick(snake_speed)
pygame.quit()
quit()
gameLoop()
导入模块:
import pygame
: 导入 Pygame 库,用于游戏开发。import time
: 导入 time 模块,用于控制游戏速度。import random
: 导入 random 模块,用于生成随机数。
初始化 Pygame 和设置游戏参数:
pygame.init()
: 初始化 Pygame 库。定义游戏需要使用的颜色和变量:
定义游戏中需要使用的函数:
message(msg, color)
: 显示消息在游戏窗口中,用于显示游戏结束信息。gameLoop()
: 游戏主循环函数,包括游戏逻辑和事件处理。游戏主循环:
gameLoop()
函数中,使用了多个循环来处理游戏的逻辑和事件。游戏退出:
pygame.quit()
和 quit()
函数退出 Pygame,并终止 Python 程序的执行。pip install pygame
来安装。pip install matplotlib
。clock.tick()
函数中的参数,这个参数控制了游戏的帧率,从而影响贪吃蛇的移动速度。pygame.display.set_mode()
或 Matplotlib 绘图窗口的尺寸参数,以适应不同的屏幕和需求。在完成贪吃蛇游戏和小熊猫绘制的实验中,我遇到了不少挑战,这些经历让我对Python有了更深的认识和理解。Python作为一种编程语言,它的简洁性和灵活性让我能够较快地上手和实现想法,尤其是在处理游戏逻辑和图形界面时。通过实际操作,我体会到了Python强大的功能和广泛的应用范围。通过这些实验,我意识到编程不仅仅是写代码,更多的是解决问题的过程。每次遇到问题,我需要思考问题的原因,查找解决方案,并实际应用到我的项目中。这个过程让我学会了如何有效地使用搜索引擎,如何阅读和理解官方文档,这对于任何编程语言的学习都是非常重要的。
此外,我也体会到了代码的组织和规划的重要性。在项目初期,由于缺乏经验,我的代码经常变得混乱和难以管理。通过学习和实践,我逐渐学会了如何结构化我的代码,使其更加模块化,从而易于维护和扩展。这不仅提高了我的编程效率,也让整个项目更加稳定和可靠。
总体来说,通过这两个实验,我不仅提升了自己的编程技能和解决问题的能力,还加深了对Python的理解。这些经历让我认识到持续学习和实践的重要性,无论是在学术还是职业生涯中,这种积极主动的学习态度都将是我最宝贵的资产。
在我不断学习和探索的过程中,我对Python这一编程语言有了更深层次的认识。我发现Python不仅简洁易学,而且功能强大,能够通过简单的几行代码完成复杂的任务,从而极大地提高工作和学习的效率。我渴望在未来能继续深入学习Python,掌握更多高级功能,并应用这些技能来解决实际问题,达到将所学知识应用于实践的目的。
为了帮助学生更好地理解Python的实际应用,我建议在未来的教学安排中,教师们可以适当增加对Python在现实世界中应用的讲解和实战演练。通过这种方式,学生不仅可以看到Python编程在解决具体问题中的实际效用,而且能够通过动手实践,增进对Python技能的掌握。这种教学模式不仅可以激发学生们对编程学习的兴趣,还可以帮助他们更好地理解理论知识与实践应用之间的联系,从而在学习中获得更多的动力和成就感。
增加实际案例和应用练习,将使学生们在实际操作中遇到问题,并通过解决这些问题来加深对Python编程的理解。这种学以致用的教学方法将有助于学生们建立起更加扎实的技术基础,同时培养他们的问题解决能力和创新思维。这样的课程设计不仅能够促进学生的个人成长,还能为他们将来的职业生涯奠定坚实的基础。