用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 个趣味小改改

  1. 风太大?
    wave = 20*sin(...) 的 20 改成 5,立刻“微风拂面”。

  2. 旗子太慢?
    frames=200, interval=50 改成 frames=100, interval=30,飘得更快。

  3. 手机发不了 .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!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐