当然可以!用 Python 画 Python 的 Logo 是一个非常有趣且经典的任务,Python 的 Logo 由两条相互缠绕的蛇组成,一条是 Python 蓝,另一条是 Python 黄。

我们将使用 Python 的 turtle 模块来完成这个任务,因为它非常适合绘制这种基于路径和形状的图形,而且它本身就是 Python 标准库的一部分,无需额外安装。
下面我将提供两种方法:
- 使用
turtle模块绘制 - 这是最直接、最容易理解的方法。 - 使用
matplotlib模块绘制 - 这种方法更偏向于数据可视化,但也能实现类似效果。
使用 turtle 模块绘制
turtle 模块通过一个“海龟”在屏幕上爬行来绘制图形,非常适合初学者和绘制路径图形。
代码实现
import turtle
# 设置画布和速度
screen = turtle.Screen()
screen.title("Python Logo with Turtle")
screen.bgcolor("white")
speed = 10 # 设置绘制速度
# 创建海龟对象
t = turtle.Turtle()
t.speed(speed)
t.hideturtle() # 隐藏海龟箭头
# --- 绘制蓝色的蛇身 ---
t.penup()
t.goto(-70, 120) # 移动到起始位置
t.pendown()
t.color("#3776AB") # Python 蓝
t.pensize(20)
# 绘制蓝色蛇的S形曲线
t.right(45)
t.circle(-100, 90) # 逆时针画一个四分之一圆
t.right(90)
t.circle(-100, 90)
t.right(90)
t.circle(-50, 90)
t.right(90)
t.circle(-50, 45)
t.left(90)
t.forward(50)
# --- 绘制黄色的蛇身 ---
t.penup()
t.goto(70, -120) # 移动到黄色蛇的起始位置
t.pendown()
t.color("#FFD43B") # Python 黄
t.pensize(20)
# 绘制黄色蛇的S形曲线
t.left(45)
t.circle(100, 90) # 顺时针画一个四分之一圆
t.left(90)
t.circle(100, 90)
t.left(90)
t.circle(50, 90)
t.left(90)
t.circle(50, 45)
t.right(90)
t.forward(50)
# --- 绘制眼睛 ---
# 蓝色蛇的眼睛
t.penup()
t.goto(-40, 100)
t.pendown()
t.color("white")
t.begin_fill()
t.circle(10)
t.end_fill()
# 黄色蛇的眼睛
t.penup()
t.goto(40, -100)
t.pendown()
t.color("black")
t.begin_fill()
t.circle(10)
t.end_fill()
# 完成
turtle.done()
代码解析
- 导入和设置:导入
turtle模块,创建一个画布窗口,并设置背景色和绘制速度。 - 创建海龟:创建一个
Turtle对象,并隐藏它的箭头,让画面更干净。 - 绘制蓝色蛇:
- 使用
penup()和pendown()来控制画笔的起落。 goto()移动到蓝色蛇的起始位置。color()设置颜色为 Python 的官方蓝色#3776AB。pensize()设置线条粗细。- 通过
right()和circle()命令的组合,绘制出S形的蛇身。
- 使用
- 绘制黄色蛇:
- 过程与蓝色蛇类似,但起始位置、颜色(
#FFD43B)和画圆的方向(顺时针)都相反。
- 过程与蓝色蛇类似,但起始位置、颜色(
- 绘制眼睛:
- 使用
begin_fill()和end_fill()来填充圆形。 - 蓝色蛇的眼睛是白色的,黄色蛇的眼睛是黑色的,形成对比。
- 使用
- 完成:
turtle.done()保持窗口打开,直到用户手动关闭。
运行效果
运行上述代码,你会得到一个经典的 Python Logo。
使用 matplotlib 模块绘制
matplotlib 是一个强大的数据可视化库,虽然不是为绘制这种艺术图形而设计的,但我们可以通过绘制路径来模拟 Logo。
代码实现
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_aspect('equal') # 保持横纵轴比例一致
ax.set_xlim(-150, 150)
ax.set_ylim(-150, 150)
ax.axis('off') # 隐藏坐标轴
# 定义颜色
python_blue = "#3776AB"
python_yellow = "#FFD43B"
# --- 绘制蓝色蛇身 ---
# 使用贝塞尔曲线来创建平滑的S形
# 我们用多个小线段来模拟曲线
t = np.linspace(0, 1, 100)
# 控制点定义了曲线的形状
blue_x = -70 * np.cos(t * np.pi * 2) - 50 * np.sin(t * np.pi)
blue_y = 70 * np.sin(t * np.pi * 2) + 50 * np.cos(t * np.pi)
# 创建一个粗线来代表蛇身
blue_line = ax.plot(blue_x, blue_y, color=python_blue, linewidth=20, solid_capstyle='round')[0]
# --- 绘制黄色蛇身 ---
yellow_x = 70 * np.cos(t * np.pi * 2) + 50 * np.sin(t * np.pi)
yellow_y = -70 * np.sin(t * np.pi * 2) - 50 * np.cos(t * np.pi)
yellow_line = ax.plot(yellow_x, yellow_y, color=python_yellow, linewidth=20, solid_capstyle='round')[0]
# --- 绘制眼睛 ---
# 蓝色蛇的眼睛 (白色圆圈)
blue_eye = patches.Circle((-40, 100), 10, color='white', zorder=10)
ax.add_patch(blue_eye)
# 黄色蛇的眼睛 (黑色圆圈)
yellow_eye = patches.Circle((40, -100), 10, color='black', zorder=10)
ax.add_patch(yellow_eye)
plt.title("Python Logo with Matplotlib", fontsize=16)
# 显示图形
plt.show()
代码解析
- 导入库:除了
matplotlib.pyplot,我们还导入了matplotlib.patches用于绘制形状(如圆形),以及numpy用于生成数学曲线。 - 创建画布:
plt.subplots()创建一个图形和一个坐标轴。ax.set_aspect('equal')确保1:1的比例,否则蛇会变形。ax.axis('off')隐藏了坐标轴。 - 绘制蛇身:
- 我们使用参数方程来生成S形曲线的坐标点,这里用
np.cos和np.sin函数组合来模拟复杂的路径。 ax.plot()绘制线条,linewidth设置粗细,solid_capstyle='round'让线条端点圆润,更像蛇身。
- 我们使用参数方程来生成S形曲线的坐标点,这里用
- 绘制眼睛:
- 使用
patches.Circle创建两个圆形,分别代表白色和黑色的眼睛。 zorder=10确保眼睛绘制在蛇身的上层。
- 使用
- 显示图形:
plt.show()将最终生成的图像显示出来。
运行效果
运行 matplotlib 版本的代码,你将得到一个与 turtle 版本相似的 Logo,但渲染方式是基于矢量图形的,通常在缩放时质量更高。
| 特性 | turtle 模块 |
matplotlib 模块 |
|---|---|---|
| 适用场景 | 教学、简单图形绘制、路径动画 | 数据可视化、科学计算、高质量图表 |
| 优点 | 直观,易于理解,无需数学计算 | 功能强大,可生成出版质量图片,高度可定制 |
| 缺点 | 功能相对简单,不适合复杂场景 | 绘制自定义路径需要一定的数学知识 |
| 代码风格 | 命令式,像指挥海龟 | 声明式,像配置图表 |
对于“画 Python Logo”这个任务,turtle 是更自然、更简单的选择,而 matplotlib 则展示了用数据可视化工具完成艺术创作的可能性,希望这个教程对你有帮助!
