20254111 实验四《Python程序设计》实验报告
学号 2025-2026-2 《Python程序设计》实验4报告
课程:《Python程序设计》
班级: 2541
姓名: 周笑凡
学号:20254111
实验教师:王志强
实验日期:2026年5月26日
必修/选修:专选课
一、实验要求
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
批阅:注意本次实验不算做实验总分,前三个实验每个实验15分,累计45分。本次实践算入综合实践,打分为45分。
评分标准:
(1)程序能运行,功能丰富(至少5个功能)。(需求提交源代码,并建议录制程序运行的视频)15分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。20分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。10分
二、实验过程
1、程序选择:
其实本人小时候并不是很喜欢玩小游戏,玩的话也是那种装扮类的。所以我在检索的过程中找到了这个金币游戏,感觉还挺有趣的,也有一定的操作性,所以就选择它作为我的实验对象。
2、游戏玩法设计:
玩家通过移动鼠标控制屏幕底部的篮子,在60秒内尽可能多地接住从顶部掉落的金币和钻石来获得分数(金币+10分,钻石+50分),同时要避开炸弹(-20分)。游戏难度随得分自动提升,每获得350分掉落速度加快、同时出现的物品数量增加,难度升级时屏幕会显示红色警告文字,背景颜色也逐渐变红。时间结束后显示最终得分,按R键可重新开始。
3、代码编写
(1)安装pygame,导入模块,并初始化游戏。
导入游戏所需的库(pygame做游戏、random随机、time计时、math数学计算)
初始化pygame引擎;设置游戏标题
创建800×600像素的游戏窗口;创建时钟对象(控制游戏帧率,每秒60帧)

(2)进行游戏基本元素设置
定义游戏中使用的各种颜色(RGB值)
确定盛金币的篮子的尺寸和位置

(3)三个核心数据结构
items列表用于动态管理所有正在下落的物品对象;
effects列表用于管理接物后的视觉特效动画;
score变量用于记录玩家当前得分。
定义游戏时长,总计60秒。

(4)游戏难度值设置
warning_message用于控制难度升级提示的显示。当难度提升时,屏幕上显示红色大号警告文字,2秒后自动清空。
background_red变量建立难度越高背景越红的视觉反馈机制。随着玩家得分增加,难度等级提升,背景由纯白色逐渐过渡到淡红色,增强游戏体验感。

(5)游戏音效设置
尝试加载音效文件(金币声、钻石声、炸弹声、背景音乐)
使用try-except异常处理:如果文件不存在,程序不会崩溃,只是没有声音
设置音量(0.5表示50%音量)

(6)三个物品绘制函数
①draw_coin() 用于绘制金币
使用两层圆形制造金币的立体感(外圈金色,内圈亮金色)
使用render()和blit()在金币中央绘制"$"符号
在左上角添加高光小圆点,模拟金属反光效果
②draw_diamond() 用于绘制钻石
使用多边形绘制4个顶点,构成菱形(钻石形状)
添加高光点模拟钻石的闪耀效果
③draw_bomb() 用于绘制炸弹
黑色圆形为主体,配以深灰色内圈增加层次
红色引线从炸弹顶部斜向伸出

(7)玩家(篮子)绘制函数
draw_basket()通过矩形、椭圆、线条的组合,构建了一个具有编织纹理和立体感的篮子。装饰元素的添加使游戏界面更加友好可爱。

(8)爆炸特效绘制函数
draw_explosion()实现了完整的爆炸动画效果。通过帧计数器控制火焰扩张、烟雾扩散和碎片飞溅,营造出强烈的视觉冲击力。

(9)金币收集与钻石手机特效绘制函数
draw_coin_effect()通过光圈扩散和四向星光,模拟了金币被收集时的"绽放"视觉效果,给玩家带来积极的反馈体验。
draw_diamond_effect()作为高级物品的收集特效,采用了更密集的八方向星光和蓝色渐变光圈,与钻石的高分值(50分)相匹配。

(10)难度控制系统
①线性难度增长:每350分提升一级,曲线平滑
②视觉反馈机制:难度升级时屏幕中央显示红色大号警告文字,2秒后自动消失
③动态掉落数量:随难度增加,一次掉落物品从1个逐渐增加到2-3个
游戏前易后难,既能吸引玩家快速上手,又能提供足够的挑战。

(11)事件处理设置
包含窗口关闭和键盘按键两个事件。当游戏处于结束状态且玩家按下R键时,程序会重置所有游戏状态变量——包括分数、物品列表、特效列表、掉落速度、计时起点等,实现"一键重启"功能。try-except结构用于安全地重新播放背景音乐,即使音乐文件缺失也不会导致程序崩溃。

(12)游戏三大驱动核心
①倒计时系统。采用time.time()函数获取系统时间戳,通过计算开始时间与当前时间的差值得到已用时长。时间耗尽时,程序自动保存最终分数并停止背景音乐。
②玩家控制采用鼠标跟随方案。通过pygame.mouse.get_pos()实时获取鼠标X坐标,并将篮子中心对齐到鼠标位置。边界检测使用max()和min()函数将篮子位置限制在窗口范围内。
③物品生成模块。采用概率触发机制,每帧有4%的概率生成新物品。生成数量由难度等级决定,难度越高同时掉落的物品越多。在高难度(≥3)下,炸弹的出现概率提升至30%,增加了游戏挑战性。

(13)碰撞检测与得分系统
位置更新:通过item[1] += item_speed每帧将所有物品向下移动,速度随难度递增。
碰撞箱创建:使用pygame.Rect()为篮子和每个物品创建矩形碰撞区域,位置和尺寸与视觉图形对应。
碰撞检测:调用colliderect()方法判断篮子与物品的矩形是否重叠。
反馈处理:碰撞后根据物品类型执行对应操作:金币+10分、钻石+50分、炸弹-20分,并播放音效、生成视觉特效。
物品清理:碰撞后或物品超出底部边界时,通过items.remove(item)将其从列表中移除,避免内存无限增长。

(14)难度调节系统
①速度升级:采用公式item_speed = 5 + score // 350,每获得350分掉落速度增加1,分数越高游戏节奏越快。
②警告显示:当难度升级时,使用big_font.render()生成警告文字,通过screen.blit()绘制在屏幕中央,持续2秒后自动清除。

(15)游戏渲染系统(对前面特效的补充)
①调用draw_basket()函数,在玩家当前坐标位置绘制棕色藤篮,包含编织纹理和蝴蝶结装饰。(因为最开始的篮子非常的简陋)
②根据特效类型分别调用draw_coin_effect()、draw_diamond_effect()或draw_explosion(),通过帧计数器实现动画效果。(最开始的特效很丑)

(16)UI信息显示系统负
显示得分:使用font.render()生成得分文本,通过screen.blit()绘制在屏幕左上角(10, 10)位置。
显示倒计时:将剩余秒数通过// 60和% 60转换为分钟和秒,格式化为MM:SS形式。计算文本宽度后采用右对齐方式绘制在屏幕右上角,确保时间始终完整显示。
显示速度:使用小号字体在屏幕左下角(10, 565)显示当前掉落速度,数值越大游戏节奏越快。
显示难度:在得分下方(10, 50)显示当前难度等级(0-5级),使用橙色字体便于识别。

(17)游戏结束与程序退出系统
①游戏结束画面。当倒计时归零时,程序执行else分支,使用big_font.render()生成"GAME OVER"、最终得分和"Press R to restart"三行文本。
②文字居中计算。通过get_width()获取每个文本的宽度,以屏幕中心(400, y)为基准减去宽度的一半,实现完美的居中显示。
③画面更新与帧率控制。每帧结束时调用pygame.display.update()刷新屏幕,clock.tick(60)将帧率锁定在60帧/秒,确保游戏运行流畅。

4、源代码
import pygame
import random
import time
import os
import math
初始化
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Treasure Catcher")
clock = pygame.time.Clock()
pygame.mixer.init()
Colors
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 150, 0)
GOLD = (255, 215, 0)
CYAN = (0, 255, 255)
BLACK = (0, 0, 0)
BROWN = (139, 69, 19)
DARK_BROWN = (101, 67, 33)
ORANGE = (255, 100, 0)
YELLOW = (255, 255, 0)
GRAY = (100, 100, 100)
Player
player_width = 100
player_height = 40
player_y = 550
Items
items = []
item_speed = 5
Effects
effects = []
Score
score = 0
font = pygame.font.Font(None, 36)
big_font = pygame.font.Font(None, 72)
small_font = pygame.font.Font(None, 24)
Timer
start_time = time.time()
game_duration = 60
Difficulty
warning_message = ""
warning_start_time = 0
background_red = 0
last_difficulty = -1
========== Sound Loading ==========
base_dir = os.path.dirname(file)
sounds_dir = os.path.join(base_dir, "sounds")
try:
pygame.mixer.music.load(os.path.join(sounds_dir, "bgm.mp3"))
pygame.mixer.music.set_volume(0.3)
pygame.mixer.music.play(-1)
except:
pass
try:
coin_sound = pygame.mixer.Sound(os.path.join(sounds_dir, "coin.wav"))
coin_sound.set_volume(0.5)
except:
coin_sound = None
try:
diamond_sound = pygame.mixer.Sound(os.path.join(sounds_dir, "diamond.wav"))
diamond_sound.set_volume(0.5)
except:
diamond_sound = None
try:
bomb_sound = pygame.mixer.Sound(os.path.join(sounds_dir, "bomb.wav"))
bomb_sound.set_volume(0.5)
except:
bomb_sound = None
========== Drawing Functions ==========
def draw_coin(surface, x, y, size=40):
pygame.draw.circle(surface, GOLD, (x + size // 2, y + size // 2), size // 2)
pygame.draw.circle(surface, (255, 185, 0), (x + size // 2, y + size // 2), size // 2 - 2)
font_small = pygame.font.Font(None, size)
dollar = font_small.render("$", True, DARK_BROWN)
surface.blit(dollar, (x + size // 2 - 10, y + size // 2 - 15))
pygame.draw.circle(surface, (255, 255, 150), (x + size // 3, y + size // 3), size // 8)
def draw_diamond(surface, x, y, size=40):
points = [
(x + size // 2, y + 3),
(x + size - 3, y + size // 2),
(x + size // 2, y + size - 3),
(x + 3, y + size // 2)
]
pygame.draw.polygon(surface, CYAN, points)
pygame.draw.polygon(surface, (0, 200, 255), points, 2)
pygame.draw.circle(surface, (200, 255, 255), (x + size // 2 - 6, y + size // 2 - 6), 5)
def draw_bomb(surface, x, y, size=40):
pygame.draw.circle(surface, BLACK, (x + size // 2, y + size // 2), size // 2)
pygame.draw.circle(surface, (50, 50, 50), (x + size // 2, y + size // 2), size // 2 - 2)
pygame.draw.line(surface, RED, (x + size // 2 + 7, y + 7), (x + size // 2 + 16, y - 4), 4)
pygame.draw.line(surface, RED, (x + size // 2 - 6, y + size // 2 - 6), (x + size // 2 + 6, y + size // 2 + 6), 3)
pygame.draw.line(surface, RED, (x + size // 2 + 6, y + size // 2 - 6), (x + size // 2 - 6, y + size // 2 + 6), 3)
def draw_basket(surface, x, y, width, height):
pygame.draw.rect(surface, BROWN, (x, y, width, height), border_radius=10)
pygame.draw.rect(surface, DARK_BROWN, (x, y, width, height), border_radius=10, width=3)
pygame.draw.ellipse(surface, DARK_BROWN, (x + 5, y - 5, width - 10, 12))
pygame.draw.ellipse(surface, (80, 40, 20), (x + 7, y - 3, width - 14, 8))
for i in range(4):
line_y = y + 8 + i * 9
pygame.draw.line(surface, DARK_BROWN, (x + 8, line_y), (x + width - 8, line_y), 2)
for i in range(6):
line_x = x + 15 + i * 15
pygame.draw.line(surface, DARK_BROWN, (line_x, y + 5), (line_x, y + height - 5), 2)
pygame.draw.rect(surface, (180, 100, 50), (x + 3, y - 2, width - 6, 8), border_radius=4)
bow_x = x + width - 12
bow_y = y - 2
pygame.draw.circle(surface, (200, 100, 100), (bow_x, bow_y), 4)
pygame.draw.circle(surface, (255, 150, 150), (bow_x - 3, bow_y - 2), 3)
pygame.draw.circle(surface, (255, 150, 150), (bow_x + 3, bow_y - 2), 3)
def draw_explosion(surface, x, y, frame):
size = 10 + frame * 5
pygame.draw.circle(surface, (255, 100, 0), (x, y), size + 6)
pygame.draw.circle(surface, (255, 150, 0), (x, y), size + 3)
pygame.draw.circle(surface, (255, 200, 50), (x, y), size)
smoke_radius = 6 + frame * 2
pygame.draw.circle(surface, (80, 80, 80), (x - 10, y - 6), smoke_radius)
pygame.draw.circle(surface, (100, 100, 100), (x + 12, y - 4), smoke_radius)
pygame.draw.circle(surface, (90, 90, 90), (x + 4, y + 10), smoke_radius - 2)
debris_count = min(15, frame * 4)
for i in range(debris_count):
angle = (frame * 45 + i * 45) * math.pi / 180
distance = 18 + frame * 6
debris_x = x + distance * 0.8 * math.cos(angle)
debris_y = y + distance * 0.8 * math.sin(angle)
debris_size = max(2, 5 - frame // 3)
pygame.draw.rect(surface, (100, 50, 0), (debris_x, debris_y, debris_size, debris_size))
def draw_coin_effect(surface, x, y, frame):
size = 14 + frame * 3
pygame.draw.circle(surface, (255, 200, 0), (x, y), size, 2)
pygame.draw.circle(surface, (255, 255, 100), (x, y), size - 4, 1)
for angle in [0, 90, 180, 270]:
rad = angle * math.pi / 180
star_x = x + (size + 4) * 0.8 * math.cos(rad)
star_y = y + (size + 4) * 0.8 * math.sin(rad)
pygame.draw.circle(surface, (255, 255, 150), (int(star_x), int(star_y)), 3)
def draw_diamond_effect(surface, x, y, frame):
size = 16 + frame * 3
pygame.draw.circle(surface, (100, 200, 255), (x, y), size, 2)
pygame.draw.circle(surface, (150, 220, 255), (x, y), size - 4, 1)
for angle in [0, 45, 90, 135, 180, 225, 270, 315]:
rad = angle * math.pi / 180
star_x = x + (size + 6) * 0.7 * math.cos(rad)
star_y = y + (size + 6) * 0.7 * math.sin(rad)
pygame.draw.circle(surface, (200, 230, 255), (int(star_x), int(star_y)), 3)
========== Game Loop ==========
running = True
game_over = False
final_score = 0
while running:
# ========== 难度计算(每350分升一级)==========
difficulty = score // 350
if difficulty > 5:
difficulty = 5
# 难度升级时显示警告
if difficulty != last_difficulty and difficulty >= 1:
warning_message = f"DIFFICULTY {difficulty}!"
warning_start_time = time.time()
last_difficulty = difficulty
# 检查警告是否超过2秒
if warning_message and time.time() - warning_start_time > 2:
warning_message = ""
# 根据难度决定一次生成几个物品
if difficulty == 0:
spawn_range = (1, 1)
elif difficulty == 1:
spawn_range = (1, 2)
elif difficulty == 2:
spawn_range = (1, 3)
else:
spawn_range = (2, 3)
# 背景渐变
background_red = min(80, difficulty * 15)
bg_color = (255 - background_red, 255 - background_red, 255)
screen.fill(bg_color)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if game_over and event.key == pygame.K_r:
game_over = False
score = 0
items = []
effects = []
item_speed = 5
start_time = time.time()
final_score = 0
warning_message = ""
last_difficulty = -1
try:
pygame.mixer.music.play(-1)
except:
pass
if not game_over:
# 倒计时
elapsed = time.time() - start_time
remaining = game_duration - elapsed
if remaining <= 0:
game_over = True
final_score = score
pygame.mixer.music.stop()
# Mouse control
mouse_x, _ = pygame.mouse.get_pos()
player_x = mouse_x - player_width // 2
player_x = max(0, min(800 - player_width, player_x))
# 生成物品
if random.randint(1, 25) == 1:
num_to_spawn = random.randint(spawn_range[0], spawn_range[1])
for _ in range(num_to_spawn):
if difficulty >= 3 and random.random() < 0.3:
item_type = 'bomb'
else:
item_type = random.choice(['coin', 'diamond', 'bomb'])
item_x = random.randint(0, 800 - 50)
size_mult = random.uniform(0.9, 1.2)
item_size = int(40 * size_mult)
items.append([item_x, -30, item_type, item_size])
# 移动和碰撞
for item in items[:]:
item[1] += item_speed
item_size = item[3]
player_rect = pygame.Rect(player_x, player_y, player_width, player_height)
item_rect = pygame.Rect(item[0], item[1], item_size, item_size)
if player_rect.colliderect(item_rect):
if item[2] == 'coin':
score += 10
if coin_sound:
coin_sound.play()
effects.append([item[0] + item_size // 2, item[1] + item_size // 2, 'coin', 0])
elif item[2] == 'diamond':
score += 50
if diamond_sound:
diamond_sound.play()
effects.append([item[0] + item_size // 2, item[1] + item_size // 2, 'diamond', 0])
elif item[2] == 'bomb':
score -= 20
if bomb_sound:
bomb_sound.play()
effects.append([item[0] + item_size // 2, item[1] + item_size // 2, 'bomb', 0])
items.remove(item)
elif item[1] > 600:
items.remove(item)
# 更新特效
for effect in effects[:]:
effect[3] += 1
if effect[3] > 8:
effects.remove(effect)
# ========== 速度升级(每350分) ==========
item_speed = 5 + score // 350
# 显示警告文字
if warning_message:
warning_text = big_font.render(warning_message, True, RED)
text_width = warning_text.get_width()
screen.blit(warning_text, (400 - text_width // 2, 250))
# 绘制篮子
draw_basket(screen, player_x, player_y, player_width, player_height)
# 绘制掉落物
for item in items:
item_size = item[3]
if item[2] == 'coin':
draw_coin(screen, item[0], item[1], item_size)
elif item[2] == 'diamond':
draw_diamond(screen, item[0], item[1], item_size)
else:
draw_bomb(screen, item[0], item[1], item_size)
# 绘制特效
for effect in effects:
if effect[2] == 'coin':
draw_coin_effect(screen, effect[0], effect[1], effect[3])
elif effect[2] == 'diamond':
draw_diamond_effect(screen, effect[0], effect[1], effect[3])
elif effect[2] == 'bomb':
draw_explosion(screen, effect[0], effect[1], effect[3])
# UI
score_text = font.render(f"Score: {score}", True, BLACK)
screen.blit(score_text, (10, 10))
minutes = int(remaining) // 60
seconds = int(remaining) % 60
time_text = font.render(f"Time: {minutes:02d}:{seconds:02d}", True, RED)
time_width = time_text.get_width()
screen.blit(time_text, (780 - time_width, 10))
speed_text = small_font.render(f"Speed: {item_speed}", True, GRAY)
screen.blit(speed_text, (10, 565))
diff_text = small_font.render(f"Difficulty: {difficulty}", True, (200, 100, 0))
screen.blit(diff_text, (10, 50))
else:
# 游戏结束画面
game_over_text = big_font.render("GAME OVER", True, RED)
score_text = big_font.render(f"Final Score: {final_score}", True, BLACK)
restart_text = font.render("Press R to restart", True, BLACK)
game_over_width = game_over_text.get_width()
score_width = score_text.get_width()
restart_width = restart_text.get_width()
screen.blit(game_over_text, (400 - game_over_width // 2, 200))
screen.blit(score_text, (400 - score_width // 2, 300))
screen.blit(restart_text, (400 - restart_width // 2, 400))
pygame.display.update()
clock.tick(60)
pygame.quit()
5、运行视频
https://www.bilibili.com/video/BV1zYJp6mEQp?vd_source=8c525a7a223f435adda579956a93ce88
三、实验过程中遇到的问题和解决过程
·问题1:没想到一开始做实验就卡在了第一步。我的pygame一直安装不了。
·问题1解决方案:最后去找了老师。弄了一个半小时才装好。发现是我原来安装路径不对。总之非常的感谢老师的神手,膜拜膜拜。
·问题2:初始代码过于简单
·问题2解决方案:最开始的时候感觉游戏太简单了,我就不断加功能。一开始没有特效,然后游戏元素都特别小。我就不断修改代码,比之前的改进了一些。
·问题3:游戏界面单调。
·问题3解决方案:针对这个问题我设置了画面渐变,看上去更好看一点。
四、本次实验总结
这次实验,我在大模型的辅助下完成了一个完整的Python小游戏。
首先,我学会了用pygame这个库来写游戏。从创建窗口、画图形,到让物品掉落、检测碰撞,每一步都让我对Python的实际应用有了更深的理解。
其次,在游戏设计上,我加入了一些自己的想法。比如设置难度(分数越高掉落越快)、加入特效(接住金币有闪光、炸弹有爆炸效果)、背景渐变(难度越高背景越红)等等。这些功能提升了游戏的体验感。虽然中间调试的时候遇到过不少bug,比如物品闪现、警告文字一直闪等等,不过都一个一个解决了,还是很有成就感滴。
另外,这次实验也让我意识到编程不只是写代码,还要考虑用户体验。比如鼠标控制比键盘更顺手、倒计时放右上角右对齐更美观、难度升级给个提示让玩家知道变化……这些细节对游戏的整体感受影响挺明显的。(这也是我自己写完代码后一遍一遍去体会出来的)。
总的来说,这次实验让我把课上学到的Python知识真正用到了一个完整的程序中。虽然代码还有很多可以优化的地方,但能够把一个想法从零到一实现出来,并且能跑、能玩,这个过程本身就很值得。
五、参考资料
- [《零基础学Python》]
(https://pan-yz.cldisk.com/external/m/file/ebeadceffe1bf5812590a4f975e08c16)
哔哩哔哩、小红书
六、全课总结
这学期的Python课程涵盖了从基础语法到综合应用的完整知识体系。
(一)Python语言基础
Python是一种跨平台的解释型高级语言,可以在Windows、Linux、macOS等操作系统上运行。它是解释型语言,代码由解释器逐行执行,无需编译,便于调试和快速开发。Python也是一种面向对象的语言,支持类和继承等编程范式。同时,Python是动态类型语言,变量不需要事先声明类型,在运行时自动确定。关于"Python"这个名字的来历,其英文含义是"蟒蛇",得名于作者Guido van Rossum喜爱的英国喜剧团体Monty Python。
(二)Python语法与语句
Python的核心语法包括:变量与数据类型(整数、浮点数、字符串、布尔值)、运算符(算术、比较、逻辑运算符)、条件语句(if-elif-else)、循环语句(for循环、while循环)、函数的定义与调用、模块的导入与使用。
(三)序列与数据结构
Python提供了丰富的内置数据结构。序列类型包括列表(list)、元组(tuple)、字符串(str)。其中列表是可变的,元组是不可变的。集合(set)用于存储不重复的无序元素,字典(dictionary)以键值对形式存储数据,通过键快速访问值。
(四)字符串与正则表达式
字符串操作是文本处理的基础,常用方法包括count()(统计子串出现次数)、find()(查找子串位置)、lower()/upper()(大小写转换)。正则表达式是一种强大的模式匹配工具,用于从文本中提取特定格式的信息。例如,手机号码的正则表达式13[4-9]\d{8}匹配以13开头、第三位为4-9、后跟8位数字的号码;15[01289]\d{8}匹配以15开头、第三位为0/1/2/8/9的号码。
(五)函数与面向对象编程
函数是组织代码的基本单元,通过def关键字定义,可以实现代码的复用和模块化。函数可以接收参数并返回值,支持位置参数、默认参数和关键字参数等传递方式。
面向对象编程是Python的核心编程范式,其三大特性为:封装(将数据和操作封装在类中)、继承(子类继承父类的属性和方法)、多态(不同对象对同一方法的不同实现)。通过class关键字定义类,__init__方法用于初始化对象属性。
(六)异常处理、文件操作与数据库
异常处理用于捕获程序运行时的错误,避免程序崩溃。主要方式有try-except、try-except-else和try-finally。
结构化数据是指有固定格式的数据,如Excel表格、数据库表;非结构化数据是指没有固定格式的数据,如文本、图片、视频。SQLite是一种轻量级嵌入式数据库,无需服务器配置,适合本地存储。
文件操作的基本步骤包括:open()打开文件、write()写入内容、seek()移动文件指针、close()关闭文件。文件读写模式包括:r(只读)、w(只写,覆盖)、a(追加)、b(二进制模式,适用于图片、音视频等非文本文件)。数据库的四个基本操作是增、删、改、查(INSERT、DELETE、UPDATE、SELECT)。
(七)爬虫
爬虫是自动抓取网页信息的程序,广泛应用于数据采集、舆情监测、搜索引擎等领域。学爬虫需要注意法律风险,未经授权抓取他人数据可能违反《网络安全法》《著作权法》等,这也是"从入门到入狱"说法的由来。
爬虫工作分为两步:爬取和解析。常用的爬取类库有requests、urllib;常用的解析模块有BeautifulSoup、lxml、re(正则表达式)。robots.txt是网站指定的爬虫协议,规定了哪些页面允许爬取、哪些不允许。使用代理服务可以隐藏真实IP,避免被目标网站封禁。设置Headers可以模拟浏览器访问,绕过简单的反爬虫机制。
七、课程感想与体会
一开始知道要学Python的时候真的是抗拒的。本人简直是个电脑白痴,对编程代码这些东西可谓是一窍不通。但是王老师带着我们,梳理知识点,然后时不时的编一些小程序(虽然大部分都是copy老师写的)我居然真的慢慢感受到了Python的魅力。
让我印象最深刻的是我们实验三那个通讯实验。我和我的实验搭子在成功连接上的那一刻真的是非常非常开心,就像世界上第一个接到电话的那个人一样开心。
在写代码的过程中,我也深刻体会到任何事情都不是一蹴而就的。很多时候最开始写出来的代码过于简单,或是有漏洞,无法运行,就需要不断调整,直至达到理想的效果。
在整个课程的过程中王老师也帮助了我特别多。尤其是实验四的时候,一下就帮我解决了一大难题!简直是男神级别。老师人真的很好,课上有的时候抽我们起来回答问题,答不出来也不会说我们什么(虽然但是还是得好好学)。老师直接让Python课的体验感上升很多。
谢谢老师的细心解答和对我们的包容,我一定会在学弟学妹面前狠狠夸奖!
八、课程意见和建议
1、其实这门课除了做实验没有什么太大的压力,所以大家上课都会稍微有点松懈。有的时候会在干别的事情。可以看看有什么监督机制让大家上课更专心一点,向对待专业课那样对待Python课(可以多来点考试,实践出真知!)。
2、我感觉就是那种双人合作的实验可以多来一点。因为是要两个人一起完成,所以心中就会有那种我不能耽误对方的时间,我们要快快高质完成这个实验的想法,对比个人实验的话态度会更认真一点(绝对没有说我个人实验不认真的意思)。
3、还有一个点就是,我们不是上课要抄老师的代码嘛,然后老师打字有点快,有的时候唰一下这几行就过掉了,中间空了几行,我就会觉得特难受,就有点摆烂不想抄了。以后还是可以稍微慢一点滴(或者有什么别的方法:比如说直接把代码给同学们)。
4、更多的建议就没有啦,老师本人直接让课程魅力度加加加。

浙公网安备 33010602011771号