当前位置:首页>python>一起学Python(010):画同心圆的想与写

一起学Python(010):画同心圆的想与写

  • 2026-10-06 15:54:11
一起学Python(010):画同心圆的想与写

画同心圆看似简单,但背后蕴含了编程中的重要思维——就是如何将重复动作转化为循环。本文带你理清“怎么想”再“怎么写”的完整过程。

先想清楚:人类怎么画同心圆?

如果你手动画三个同心圆,步骤大概是:

1. 选一个中心点

2. 画一个小圆

3. 向外移动一点,画一个更大的圆

4. 重复第3步

画第2个圆时,会想着这一个圆要比上一次更大一些,也就是半径每次都增加一定的量。

这就是编程的起点:把人的思考过程翻译成计算机能懂的语言。

拆解问题:画同心圆需要知道什么?

要画一个圆,turtle库需要知道两件事:

一是圆心在哪?(默认是海龟当前位置);二是半径多大?

但turtle.circle(r)有个特点:它以海龟当前位置为圆的底部,逆时针画圆。这意味着:

如果海龟在(0,0),画出的圆底部在(0,0),圆心在(0, r)。所以如果要让所有圆共用一个圆心,海龟必须移动(0, -r)再画圆

这就是关键的数学关系:圆心y坐标 =(0, 半径的相反数)。

列出设计清单

在写代码之前,先在纸上列出要做的事:

1. 准备一个半径列表,比如[30, 60, 90, 120]

2. 准备对应的颜色列表(可选)

3. 对每个半径:

    抬起画笔(移动时不留痕迹)

    移动到(0, -半径)的位置

    放下画笔

    画一个指定半径的圆

4. 所有圆画完后,隐藏海龟,保持窗口

这个清单就是代码的“施工图纸”。

写代码:把设计翻译成Python

import turtle as t

# 设置速度最快

t.speed(0)

# 设计数据:半径列表

radii = [30, 60, 90, 120]

colors = ["red", "blue", "green", "orange"]

# 按设计清单执行

for i in range(len(radii)): #len函数返回列表元素个数

    r = radii[i]

    t.penup()

    t.goto(0, -r)      # 移动到圆的底部

    t.pendown()

    t.pencolor(colors[i])

    t.circle(r)        # 画圆

t.hideturtle()

t.done()

运行代码,你会看到四个颜色不同、大小递增的同心圆。

如果让你修改,你会怎么做?

掌握了基础版本后,可以尝试以下变化:

修改1:让圆的数量可调

num = int(input("你想画几个同心圆?"))

radii = [30 * (i+1) for i in range(num)]

用列表推导式自动生成半径。

修改2:让半径每次增加固定步长

start_r = 20

step = 25

radii = [start_r + step * i for i in range(5)]

修改3:给圆填充颜色

t.fillcolor(colors[i])

t.begin_fill()

t.circle(r)

t.end_fill()

动手试试

练习1:修改代码,画出5个半径分别为20、40、60、80、100的同心圆

练习2:让同心圆从外向内画(提示:半径从大到小)

练习3:画一组同心半圆(提示:circle(r, 180)画半圆)

【上周答案公布】

练习1:画一个彩色五边形

import turtle as t
t.fillcolor("red")
t.begin_fill()
t.circle(100,360,5)
t.end_fill()
t.hideturtle()
t.done()

或者

import turtle as t
t.fillcolor("red")
t.begin_fill()
for i in range(5):
    t.forward(100)
    t.left(72)
t.end_fill()
t.hideturtle()
t.done()

练习2:画一朵四瓣花

import turtle as tfor i in range(4):
# 画一个花瓣(两段圆弧组成)
for j in range(2):
        t.circle(50, 60)
        t.left(120)
    t.left(90)          # 4个花瓣,每次左转90度
t.hideturtle()
t.done()

练习3:画一个彩色螺旋圆

import turtle as t
colors = ["red", "orange", "black", "green", "blue", "purple"]for i in range(12):
    t.pencolor(colors[i % 6])   # 循环取色
t.circle(30 + i * 3)        # 半径逐渐增大
t.left(30)                  # 每次左转15度
t.hideturtle()
t.done()

精彩回顾:

一起学Python(009):从零开始学绘图@turtle库使用

一起学Python(008):站在巨人的肩膀上编程@Python库引用

一起学Python(007):Python赋值语句轻松入门@每日饮水记录器

一起学Python(006):分支控制结构让程序学会“做选择”@成绩评定案例

一起学Python(005):从斐波那契数列看循环控制结构

一起学Python(004):Python程序三种控制结构:顺序、分支和循环

一起学Python(003):Python代码书写规则:那些让程序崩溃的“小细节”

一起学Python(002):计算机的“数字秘密”——0和1如何统治世界?

一起学Python(001):为什么文科生也要学Python?

欢迎【点赞】+【转发】❤️

最新文章

随机文章