如何在Python Turtle中为同尺寸圆圈设置统一颜色?
解决方案:按半径统一设置圆圈颜色
要实现相同半径的圆圈颜色完全一致,核心是将半径值与固定颜色绑定,而非使用随机值。以下是具体实现步骤:
1. 定义半径-颜色映射表
创建一个字典,把递归过程中所有可能出现的半径值,对应到你需要的固定颜色。比如初始半径为50时,递归产生的半径依次是50 → 16 → 5 → 1(最后一个会触发终止条件)。
2. 修改递归函数
在绘制每个圆圈前,根据当前半径从映射表中获取对应颜色,确保同半径的圆圈颜色统一。
修改后的完整代码:
import math import turtle # 自定义半径与颜色的对应关系,可按需调整 radius_color = { 150: 'darkblue', # 最外层大圆圈的半径(50*3) 50: 'purple', 16: 'pink', 5: 'red' } def krug(x, y, r): if r < 3: return # 根据当前半径设置颜色,无匹配时用黑色作为默认 turtle.color(radius_color.get(r, 'black')) for n in range(6): # 计算子圆圈的中心坐标(用math.pi替代3.14更精确) x1 = x + round(2 * r * math.cos(n * (math.pi / 3))) y1 = y + round(2 * r * math.sin(n * (math.pi / 3))) turtle.up() turtle.goto(x1, y1 - r) turtle.down() turtle.circle(r) # 递归绘制下一层子圆圈 krug(x1, y1, r // 3) # 启动递归绘制 krug(0, 0, 50) # 绘制最外层的大圆圈,并设置对应颜色 turtle.up() turtle.goto(0, 0 - 50 * 3) turtle.down() turtle.color(radius_color.get(150, 'black')) turtle.circle(50 * 3) turtle.done()
关键说明
- 替换
3.14为math.pi,提升坐标计算的精确性。 - 映射表中的半径值必须与递归过程中实际产生的r值完全匹配(比如50//3=16,16//3=5),否则会使用默认颜色。
- 最外层的大圆圈半径是
50*3=150,也可以加入映射表统一颜色。
内容的提问来源于stack exchange,提问作者Alex Sokolov
相关产品推荐
相关产品推荐

