Python Turtle笛卡尔网格绘制:条件中断与宽度适配问题求助
笛卡尔坐标系绘制程序问题修复
存在的问题
- 输入宽度以50为增量从200到400时,网格绘制出现异常
- 选择不绘制网格(No)时,程序仍会绘制部分网格
- 代码硬编码网格线条,无法适配不同宽度的需求
- 缩进、条件判断逻辑存在错误,导致流程混乱
修复思路
- 严格控制代码缩进,确保循环和条件分支内的代码逻辑正确
- 用循环动态计算网格线条数量,替代硬编码的固定线条,适配200-400步长50的宽度
- 优化网格选择的判断逻辑,只有明确选择Yes时才执行网格绘制,No或其他输入直接跳过网格绘制
- 简化方向控制代码,避免
backward(-Height)这类易混淆的写法 - 修正错误的条件判断表达式
修复后的代码
import turtle # 初始化turtle对象和画布 t = turtle.Turtle() screen = turtle.Screen() # 获取用户输入参数 width = int(turtle.numinput("笛卡尔坐标系", "输入宽度", 200, minval=200, maxval=400)) height = int(turtle.numinput("笛卡尔坐标系", "输入高度", 200, minval=200, maxval=400)) grid_choice = turtle.textinput("笛卡尔坐标系", "是否绘制网格?(Yes/No)") # 绘制坐标系外框 def draw_border(w, h): t.penup() t.goto(-w, h) t.pendown() t.goto(-w, -h) t.goto(w, -h) t.goto(w, h) t.goto(-w, h) t.penup() # 绘制垂直网格线 def draw_vertical_grid(w, h): current_x = -w # 从左边界开始,每50像素绘制一条垂直线,直到右边界 while current_x < w: current_x += 50 t.goto(current_x, -h) t.pendown() t.goto(current_x, h) t.penup() # 绘制水平网格线(可选,如需完整网格可取消注释) def draw_horizontal_grid(w, h): current_y = -h while current_y < h: current_y += 50 t.goto(-w, current_y) t.pendown() t.goto(w, current_y) t.penup() # 主执行逻辑 if grid_choice and grid_choice.strip().lower() == "yes": draw_border(width, height) draw_vertical_grid(width, height) # draw_horizontal_grid(width, height) # 如需水平网格,取消此行注释 elif grid_choice and grid_choice.strip().lower() == "no": draw_border(width, height) else: # 输入无效时默认只绘制外框 draw_border(width, height) # 保持画布窗口显示 screen.mainloop()
代码说明
- 将重复的绘制逻辑封装为函数,提升代码可读性和可维护性
- 通过循环动态计算网格线条数量,自动适配200、250、300、350、400等不同宽度
- 严格判断用户的网格选择指令,避免非预期的网格绘制
- 修正了原代码中的缩进、方向控制等逻辑错误
- 补充了水平网格线的绘制函数,可按需启用
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

