使用Python Turtle绘制棋盘异常,求助排查fill函数问题
问题分析与修正代码
你的代码核心问题在于填充逻辑与绘图逻辑完全脱节,加上函数职责混乱、海龟路径失控,导致输出随机图形。具体问题点:
fill()函数仅设置颜色,没有针对单个格子执行填充动作,也没和绘图绑定begin_fill()和end_fill()包裹了错误的绘图流程,填充范围完全错误- 多个函数重复执行类似移动动作,海龟路径混乱
- 模块名
turtle被变量覆盖,虽不报错但易引发混淆
修正后的代码
import turtle # 初始化屏幕 screen = turtle.Screen() screen.setup(800, 800) screen.bgcolor('pink') screen.colormode(255) screen.title("chessboard") # 创建海龟对象,避免和模块名冲突 pen = turtle.Turtle() pen.speed(0) pen.hideturtle() # 格子尺寸与起始坐标 cell_size = 30 start_x = -120 start_y = -120 # 绘制单个带填充的格子 def draw_filled_cell(x, y, color): pen.penup() pen.goto(x, y) pen.pendown() pen.fillcolor(color) pen.begin_fill() # 绘制正方形格子 for _ in range(4): pen.forward(cell_size) pen.right(90) pen.end_fill() # 绘制完整棋盘 def draw_chessboard(): for row in range(8): for col in range(8): # 计算当前格子的左上角坐标 x = start_x + col * cell_size y = start_y + row * cell_size # 根据行列和判断颜色(国际象棋棋盘配色规则) cell_color = '#000000' if (row + col) % 2 == 0 else '#FFFFFF' draw_filled_cell(x, y, cell_color) # 执行绘制 draw_chessboard() # 保持窗口打开 screen.mainloop()
关键修正说明
- 拆分职责:单独实现
draw_filled_cell()函数,每个格子独立处理移动、绘制、填充,逻辑清晰 - 路径可控:通过双重循环遍历8x8的格子,逐个计算坐标并绘制,海龟路径不会混乱
- 填充正确:每个格子单独调用
begin_fill()和end_fill(),填充范围精准对应单个格子 - 命名规范:将海龟对象命名为
pen,避免覆盖turtle模块名 - 窗口持久化:用
screen.mainloop()替代原错误的screen.update(),确保绘制完成后窗口保持打开
内容的提问来源于stack exchange,提问作者Luxin Zhang
相关产品推荐
相关产品推荐

