使用Turtle绘制马赛克网格入门编程问题求助
Turtle马赛克图案绘制故障排查与修复
作业要求
- 使用Turtle图形库制作马赛克瓷砖图案
- 必须满足:
- 全程使用循环结构
- 绘制16个完全相同的瓷砖
- 用到3种及以上颜色
遇到的问题
作为编程新手,尝试简化实现时踩了坑:原本想让海龟画完一个图案就右移,重复4次,但只有第一次移动了,后面三次全画在同一个位置,调整循环顺序也没解决。
当前代码
# Creating a mosaic using greg the turlte from the Turtle Graphics module import turtle #setting up the screen environment myscreen = turtle.Screen() myscreen.bgcolor("black") myscreen.screensize(400, 400) # Initializing turtles, their writing speed, and pen color greg = turtle.Turtle() greg.speed(0.5) greg.color('red') # Set starting locations for each turtle greg.up() greg.goto(-250, 250) greg.down() #create loop function for each turtle y = -250 angle = 91 for y in range(4): for x in range(50): greg.forward(x) greg.left(angle) greg.up() greg.goto(y, 250) greg.down() y = y + 100 myscreen.exitonclick()
输出效果
只有第一个图案在初始位置,后面三个图案完全重叠在它上面,根本没向右偏移。
期望效果
形成4行4列的整齐网格,16个图案各占一个位置,构成马赛克布局。
问题根因
循环里的y变量逻辑错了:for y in range(4)会让y依次取0、1、2、3,你在循环里改y = y + 100根本没用,循环迭代的时候还是会用range里的原值,导致每次goto(y, 250)的x坐标都是0、1、2、3,几乎在同一个点,图案当然重叠。
修复后的代码
import turtle # 屏幕设置 myscreen = turtle.Screen() myscreen.bgcolor("black") myscreen.setup(width=800, height=800) # 调大窗口适配16个图案 # 初始化海龟 greg = turtle.Turtle() greg.speed(0) # 加快绘制速度 colors = ['red', 'blue', 'green', 'orange'] # 准备4种颜色 # 初始位置和瓷砖间距 start_x = -300 start_y = 300 tile_gap = 150 # 每个瓷砖之间的间距 # 绘制4行4列共16个瓷砖 for row in range(4): for col in range(4): # 移动到当前瓷砖的起点 greg.up() greg.goto(start_x + col * tile_gap, start_y - row * tile_gap) greg.down() # 切换颜色 greg.color(colors[row % 4]) # 绘制单个瓷砖图案 angle = 91 for x in range(50): greg.forward(x) greg.left(angle) # 重置海龟方向,避免影响下一个图案 greg.setheading(0) myscreen.exitonclick()
关键修改说明
- 坐标计算:用
start_x + col * tile_gap和start_y - row * tile_gap计算每个瓷砖的起始位置,确保行列都能正确偏移,不会重叠。 - 颜色设置:加了颜色列表,通过
row % 4循环用4种颜色,满足作业3种及以上颜色的要求。 - 双层循环:外层控制行,内层控制列,4×4刚好16个瓷砖,符合作业要求。
- 方向重置:每个图案画完后调用
setheading(0),保证下一个图案从正方向开始画,不会歪。 - 窗口调整:把窗口改成800×800,防止图案超出屏幕看不到。
内容的提问来源于stack exchange,提问作者Richelle
相关产品推荐
相关产品推荐

