20224210郑楷隆 实验四《Python程序设计》实验报告

20224210郑楷隆 2024-05-28 23:09:12

20224210 2022-2023-2 《Python程序设计》实验4报告

课程:《Python程序设计》
班级: 2242
姓名: 郑楷隆
学号:20224210
实验教师:王志强
实验日期:2024年5月14日
必修/选修: 专选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。

本次实验做了三个实验分别是:1、编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。(失败)

2、用python画一只小熊猫

3、编写小游戏:贪吃蛇

2. 实验过程及结果

实验一:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。(失败)

我们可以使用新浪微博作为数据源,来实现舆情监控或情感分析。

步骤 1: 安装必要的 Python 库

 步骤 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.")

实验结果:失败

 实验2:用python画一只小熊猫

结果如下:

实验分析及设计:

源代码

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()

 分析

  1. 导入 Matplotlib 库:首先导入了 Matplotlib 库,这是一个用于绘制图表和图形的 Python 库。

  2. 定义绘制函数

    • draw_panda():绘制小熊猫的各个部分,包括身体、耳朵、眼睛和手臂等。
  3. 绘制小熊猫图像

    • draw_panda() 函数中,使用 Matplotlib 库的基本图形函数来绘制小熊猫的各个部分,例如圆形和矩形。
    • 调用 plt.gca().add_patch() 函数将每个图形添加到当前绘图区域。
  4. 主函数

    • if __name__ == "__main__"::这是 Python 的惯用写法,表示当代码作为主程序执行时,以下代码块将会被执行。
    • 调用 draw_panda() 函数绘制小熊猫图像。
    • 使用 plt.axis('scaled') 设置坐标轴比例为1:1,以保证绘制出的图像不会出现拉伸或压缩。
    • 使用 plt.axis('off') 关闭坐标轴,使绘制出的图像不显示坐标轴。
    • 最后调用 plt.show() 显示绘制出的小熊猫图像

 实验3:编写小游戏:贪吃蛇

成果如下:

实验分析及设计:

源代码

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()

 

  1. 导入模块

    • import pygame: 导入 Pygame 库,用于游戏开发。
    • import time: 导入 time 模块,用于控制游戏速度。
    • import random: 导入 random 模块,用于生成随机数。

     

  2. 初始化 Pygame 和设置游戏参数

    • pygame.init(): 初始化 Pygame 库。
    • 设置游戏窗口的尺寸、标题和时钟。
  3. 定义游戏需要使用的颜色和变量

    • 定义了白色、黄色、黑色、红色、绿色和蓝色的 RGB 颜色值。
    • 定义了游戏窗口的宽度和高度、蛇的尺寸和速度等变量。
  4. 定义游戏中需要使用的函数

    • message(msg, color): 显示消息在游戏窗口中,用于显示游戏结束信息。
    • gameLoop(): 游戏主循环函数,包括游戏逻辑和事件处理。
  5. 游戏主循环

    • gameLoop() 函数中,使用了多个循环来处理游戏的逻辑和事件。
    • 游戏结束时,显示游戏结束信息,并根据用户的输入决定是退出游戏还是重新开始游戏。
    • 在游戏进行中,不断检测用户的输入来控制贪吃蛇的移动方向,同时更新贪吃蛇的位置和长度,并检测是否吃到了食物。
  6. 游戏退出

    • 当游戏结束时,调用 pygame.quit()quit() 函数退出 Pygame,并终止 Python 程序的执行。

3.遇到的问题及实验体会

1. 未安装 Pygame

  • 问题描述:尝试运行贪吃蛇游戏代码时,Python 报错提示没有找到 Pygame 模块。
  • 解决方案:确保安装了 Pygame 库。可以在命令行中运行 pip install pygame 来安装。

2. 未安装 Matplotlib

  • 问题描述:尝试运行绘制小熊猫的代码时,出现错误提示未找到 Matplotlib 模块。
  • 解决方案:安装 Matplotlib 库,使用命令 pip install matplotlib

3. 坐标计算错误

  • 问题描述:在绘制小熊猫时,如果坐标计算错误,可能导致图形部件错位。
  • 解决方案:检查每个绘图函数中的坐标和尺寸参数,确保它们正确反映了你想要的设计。

4. 游戏速度不适宜

  • 问题描述:贪吃蛇游戏的速度太快或太慢,影响游戏体验。
  • 解决方案:调整 clock.tick() 函数中的参数,这个参数控制了游戏的帧率,从而影响贪吃蛇的移动速度。

5. 界面尺寸不合适

  • 问题描述:游戏界面或绘图界面太大或太小,不适合显示器的显示尺寸。
  • 解决方案:调整 pygame.display.set_mode() 或 Matplotlib 绘图窗口的尺寸参数,以适应不同的屏幕和需求。

6. 键盘响应延迟

  • 问题描述:在贪吃蛇游戏中,键盘响应有明显延迟,影响控制。
  • 解决方案:优化事件处理循环,确保及时处理键盘事件。另外,检查其他代码部分是否有性能瓶颈,如不必要的大循环或复杂的逻辑。

7. 代码结构不清晰

  • 问题描述:随着功能增加,原始代码可能变得难以维护和扩展。
  • 解决方案:重构代码,使用函数或类来组织相关功能,使代码更加模块化和易于管理。

感悟与思考

在完成贪吃蛇游戏和小熊猫绘制的实验中,我遇到了不少挑战,这些经历让我对Python有了更深的认识和理解。Python作为一种编程语言,它的简洁性和灵活性让我能够较快地上手和实现想法,尤其是在处理游戏逻辑和图形界面时。通过实际操作,我体会到了Python强大的功能和广泛的应用范围。通过这些实验,我意识到编程不仅仅是写代码,更多的是解决问题的过程。每次遇到问题,我需要思考问题的原因,查找解决方案,并实际应用到我的项目中。这个过程让我学会了如何有效地使用搜索引擎,如何阅读和理解官方文档,这对于任何编程语言的学习都是非常重要的。

此外,我也体会到了代码的组织和规划的重要性。在项目初期,由于缺乏经验,我的代码经常变得混乱和难以管理。通过学习和实践,我逐渐学会了如何结构化我的代码,使其更加模块化,从而易于维护和扩展。这不仅提高了我的编程效率,也让整个项目更加稳定和可靠。

总体来说,通过这两个实验,我不仅提升了自己的编程技能和解决问题的能力,还加深了对Python的理解。这些经历让我认识到持续学习和实践的重要性,无论是在学术还是职业生涯中,这种积极主动的学习态度都将是我最宝贵的资产。

课程总结与建议

在我不断学习和探索的过程中,我对Python这一编程语言有了更深层次的认识。我发现Python不仅简洁易学,而且功能强大,能够通过简单的几行代码完成复杂的任务,从而极大地提高工作和学习的效率。我渴望在未来能继续深入学习Python,掌握更多高级功能,并应用这些技能来解决实际问题,达到将所学知识应用于实践的目的。

为了帮助学生更好地理解Python的实际应用,我建议在未来的教学安排中,教师们可以适当增加对Python在现实世界中应用的讲解和实战演练。通过这种方式,学生不仅可以看到Python编程在解决具体问题中的实际效用,而且能够通过动手实践,增进对Python技能的掌握。这种教学模式不仅可以激发学生们对编程学习的兴趣,还可以帮助他们更好地理解理论知识与实践应用之间的联系,从而在学习中获得更多的动力和成就感。

增加实际案例和应用练习,将使学生们在实际操作中遇到问题,并通过解决这些问题来加深对Python编程的理解。这种学以致用的教学方法将有助于学生们建立起更加扎实的技术基础,同时培养他们的问题解决能力和创新思维。这样的课程设计不仅能够促进学生的个人成长,还能为他们将来的职业生涯奠定坚实的基础。

 

 

 

 

...全文
190 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

93

社区成员

发帖
与我相关
我的任务
社区描述
Python程序设计作业
软件构建 高校 北京·丰台区
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧