You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Turtle绘制马赛克网格入门编程问题求助

Turtle马赛克图案绘制故障排查与修复

作业要求

  • 使用Turtle图形库制作马赛克瓷砖图案
  • 必须满足:
    1. 全程使用循环结构
    2. 绘制16个完全相同的瓷砖
    3. 用到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()

关键修改说明

  1. 坐标计算:用start_x + col * tile_gap和start_y - row * tile_gap计算每个瓷砖的起始位置,确保行列都能正确偏移,不会重叠。
  2. 颜色设置:加了颜色列表,通过row % 4循环用4种颜色,满足作业3种及以上颜色的要求。
  3. 双层循环:外层控制行,内层控制列,4×4刚好16个瓷砖,符合作业要求。
  4. 方向重置:每个图案画完后调用setheading(0),保证下一个图案从正方向开始画,不会歪。
  5. 窗口调整:把窗口改成800×800,防止图案超出屏幕看不到。

内容的提问来源于stack exchange,提问作者Richelle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:06:33