【Python matplotlib入门教程】用Python让五星红旗飘起来:一篇适合零基础的国庆编程入门教程
用Python让五星红旗飘起来:一篇适合零基础的国庆编程入门教程
本文适合:
- 完全没学过 Python、但想“跑个程序向祖国表白”的你;
- 正在找“国庆主题编程实践”的老师或学生;
- 想用最短时间把“飘扬的五星红旗”跑在电脑/手机上的任何人。
跟着做,30 分钟你就能得到下面这张会随风舞动的五星红旗 ⬇️
(动图效果:红旗边缘呈正弦波浪,五颗金星一起摆动)
一、先晒成果:30 行代码的“飘动”效果
import numpy as np
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 1. 画布参数
W, H = 600, 400
nx, ny = 300, 200 # 网格精度(越高越流畅,但计算量越大)
x = np.linspace(0, W, nx)
y = np.linspace(0, H, ny)
X, Y = np.meshgrid(x, y)
# 2. 五角星生成
def star_pts(x, y, r):
θ = np.deg2rad(np.arange(0, 360, 72) - 90)
outer = np.c_[r*np.cos(θ), r*np.sin(θ)]
inner = np.c_[r*0.38*np.cos(θ + np.deg2rad(18)), r*0.38*np.sin(θ + np.deg2rad(18))]
pts = np.empty((10, 2))
pts[::2], pts[1::2] = outer, inner
return pts + [x, y]
# 3. 每帧更新
def update(t):
ax.clear()
ax.set_xlim(-50, W+50)
ax.set_ylim(-50, H+50)
ax.axis('off')
# 3.1 让网格顶点随时间波动
wave_x = 20 * np.sin((X / 180 + t*0.15) * 2*np.pi) # 横向波
wave_y = 10 * np.sin((Y / 120 + t*0.10) * 2*np.pi) # 纵向微扰
Xw = X + wave_x
Yw = Y + wave_y
# 3.2 画红色旗面(用 pcolormesh 让网格真正扭曲)
ax.pcolormesh(Xw, Yw, np.ones_like(X), color='#DE2910', shading='auto')
# 3.3 画五星(同样给星心加个波浪偏移,让它们跟着旗面一起动)
def w(x, y):
# 把星心坐标映射到网格索引,再读一下当前波浪值
ix = int((x / W) * (nx - 1))
iy = int((y / H) * (ny - 1))
ix = np.clip(ix, 0, nx - 1)
iy = np.clip(iy, 0, ny - 1)
return Xw[iy, ix] - x, Yw[iy, ix] - y
# 大星
bx, by = 120, H-120
dx, dy = w(bx, by)
big = star_pts(bx + dx, by + dy, 60)
ax.fill(*big.T, color='#FFDE00', zorder=10)
# 四颗小星
for cx, cy in [(200, H-80), (220, H-140), (200, H-200), (160, H-220)]:
dx, dy = w(cx, cy)
pts = star_pts(cx + dx, cy + dy, 25)
ax.fill(*pts.T, color='#FFDE00', zorder=10)
# 4. 启动动画
fig, ax = plt.subplots(figsize=(6, 4))
ani = animation.FuncAnimation(fig, update, frames=300, interval=40)
plt.show()
跑通以后,你的屏幕上就会出现一张实时飘动的五星红旗!
下面咱们把这段代码拆成“零基础也能懂”的 5 个知识点,边学边改,你就是国庆最靓的仔。
二、零基础 5 步拆解
| 步骤 | 知识点 | 你只需要记住的一句话 |
|---|---|---|
| ① 环境 | 安装 Python + 3 个库 | pip install numpy matplotlib(标准库自带,装完就能跑) |
| ② 坐标 | 把“像素”当格子 | np.linspace 就是在 x/y 轴上打格子 |
| ③ 波浪 | 正弦函数 = 风 | 20*sin(…) 决定旗子起伏 20 像素 |
| ④ 五星 | 10 个点连一圈 | 隔一个“长半径/短半径”就能画出尖角 |
| ⑤ 动画 | FuncAnimation 循环调用 update |
把 t 当成时间,每帧重画一次 |
一句话总结:Python 把画面当成“Excel 格子”,我们只需告诉它每个格子什么颜色,再快速翻页,就能看电影!
三、动手实验:3 个趣味小改改
-
风太大?
把wave = 20*sin(...)的 20 改成 5,立刻“微风拂面”。 -
旗子太慢?
把frames=200, interval=50改成frames=100, interval=30,飘得更快。 -
手机发不了
.py?
在电脑里跑完后加一行:ani.save('flag.gif', writer='pillow', fps=20)秒变微信表情包,群聊里直接发!
四、把代码写成“国庆日记”——可直接交作业的模板
老师要求“写一篇 Python 学习笔记”?直接把下面这段 markdown 粘过去,代码块、配图、心得全有了。
我的国庆 Python 日记
日期:10 月 1 日
天气:晴
主题:让五星红旗在屏幕上飘起来
1. 今日目标
零基础学会用 Python 画一张会动的国旗。
2. 遇到的第一个坑
不会画五角星?Google 发现:原来只要 10 个点,隔一个“长/短”半径就能出现尖角,数学真酷!
3. 最惊喜的瞬间
把 sin 函数加到 y 坐标里那一刻,旗子真的“鼓”起来了,像被风吹一样,超有成就感!
五、常见 Q&A
Q1:我电脑没装 Python 怎么办?
A:手机装 Pydroid(安卓)或 Pyto(iOS),复制代码直接跑。
Q2:运行报错 ImportError?
A:终端/命令行里输入
pip install -U numpy matplotlib pillow
再跑一次即可。
Q3:想要更真实的“布纹”?
A:把 ax.imshow 换成 ax.pcolormesh,再给 RGB 通道加一点点噪声,就能出现“布褶子”。
六、写在最后
1949 年,第一面五星红旗在天安门升起;
2025 年,我们敲 30 行代码,就能让它在每个人的屏幕上迎风招展。
这就是代码的意义——把敬意变成可以分享、可以运行、可以二次创作的“数字礼物”。
开源在 GitHub 仓库(可替换为你自己的地址),欢迎 Star,欢迎 PR,一起把祝福传得更远!
运行步骤再总结(复制即可交):
# 1. 安装(国内镜像飞快)
pip install numpy matplotlib pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
# 2. 保存代码
python flag_waving.py # 电脑弹出窗口看动画
# 或
ani.save('flag.gif') # 生成表情包
国庆快乐, coding for love!
更多推荐
所有评论(0)