Python 如何在不使用define的情况下使用海龟图形和嵌套循环创建棋盘?
我正在尝试使用Python的嵌套循环创建棋盘。我很难弄清楚如何用黑色填充特定的框,以及如何创建64个框。到目前为止,我的编码是:Python 如何在不使用define的情况下使用海龟图形和嵌套循环创建棋盘?,python,python-3.x,turtle-graphics,python-turtle,Python,Python 3.x,Turtle Graphics,Python Turtle,我正在尝试使用Python的嵌套循环创建棋盘。我很难弄清楚如何用黑色填充特定的框,以及如何创建64个框。到目前为止,我的编码是: import turtle t = turtle.Turtle() t.speed(0) t.penup() t.goto(0, 0) t.pendown() for j in range(-150, 100, 50): for i in range(-150, 150, 50): t.penup() t.goto(i,
import turtle
t = turtle.Turtle()
t.speed(0)
t.penup()
t.goto(0, 0)
t.pendown()
for j in range(-150, 100, 50):
for i in range(-150, 150, 50):
t.penup()
t.goto(i, j)
t.pendown()
t.begin_fill()
for k in range(4):
t.forward(50)
t.left(90)
t.color("black")
t.end_fill()
for j in range(-100, 150, 50):
for i in range(-100, 150, 50):
t.penup()
t.goto(i, j)
t.pendown()
t.begin_fill()
for k in range(4):
t.forward(50)
t.left(90)
t.end_fill()
t.hideturtle()
turtle.done()
尝试将方框图封装在函数中,以使逻辑更清晰。您还可以切换填充标志并将其传递给函数
import turtle
t = turtle.Turtle()
t.speed(0)
t.penup()
t.goto(0, 0)
t.pendown()
side=50 # height and width of box
def drawblock(x,y,fill): # draw one box
t.penup()
t.goto((0-4+x)*side, (0-4+y)*side) # 0,0 is center of screen
t.pendown()
if fill: t.begin_fill()
for k in range(4):
t.forward(50)
t.left(90)
t.color("black")
if fill: t.end_fill()
fill = True
for x in range(8):
fill = not fill # toggle column
for y in range(8):
drawblock(x,y, fill)
fill = not fill # toggle row
turtle.done()
---更新---
如果不想创建函数,只需将函数逻辑复制到主循环中即可
import turtle
t = turtle.Turtle()
t.speed(0)
t.penup()
t.goto(0, 0)
t.pendown()
side=50 # height and width of box
fill = True
for x in range(8):
fill = not fill # toggle column
for y in range(8):
#drawblock(x,y, fill)
t.penup()
t.goto((0-4+x)*side, (0-4+y)*side) # 0,0 is center of screen
t.pendown()
if fill: t.begin_fill()
for k in range(4):
t.forward(50)
t.left(90)
t.color("black")
if fill: t.end_fill()
fill = not fill # toggle row
turtle.done()
输出
这将实现以下目的:
import turtle
def drawSquare(turtule, isBlack = False):
if isBlack:
t.begin_fill()
for k in range(4):
t.forward(50)
t.left(90)
t.color("black")
t.end_fill()
t = turtle.Turtle()
t.speed(0)
t.penup()
t.goto(0, 0)
t.pendown()
lastWhite = False
for j in range(-150, 250, 50):
lastWhite = not lastWhite
for i in range(-150, 250, 50):
t.penup()
t.goto(i, j)
t.pendown()
if lastWhite:
drawSquare(t, True)
lastWhite = False
else:
drawSquare(t)
lastWhite = True
t.hideturtle()
turtle.done()
编辑:此代码不使用drawSquare
方法
import turtle
t = turtle.Turtle()
t.speed(0)
t.penup()
t.goto(0, 0)
t.pendown()
lastWhite = False
for j in range(-150, 250, 50):
lastWhite = not lastWhite
for i in range(-150, 250, 50):
t.penup()
t.goto(i, j)
t.pendown()
if lastWhite:
t.begin_fill()
for k in range(4):
t.forward(50)
t.left(90)
t.color("black")
t.end_fill()
lastWhite = False
else:
for k in range(4):
t.forward(50)
t.left(90)
t.color("black")
lastWhite = True
t.hideturtle()
turtle.done()
这里有一个稍微复杂一点的方法,它提供了更大的灵活性,并使用模运算符进行替换
导入海龟
#定义我们的电路板和瓷砖尺寸。
董事会={
“宽度”:8,
“高度”:8
}
瓷砖={
“宽度”:50,
“高度”:50
}
#设置海龟。
t=海龟。海龟()
t、 速度(0)
t、 彭普()
t、 后藤(0,0)
t、 颜色(“黑色”);
#在电路板宽度和高度的长度上循环。
对于范围内的瓷砖x(板[“宽度]):
对于范围内的瓷砖(板[“高度]):
#绘制平铺之前,将平铺宽度和高度乘以循环中的当前X和Y位置。
t、 转到(平铺x*平铺[“宽度”]、平铺y*平铺[“高度”])
#仅为每个奇数平铺启用填充。
如果((平铺x+平铺y)%2):
t、 开始填充()
#开始画瓷砖。
t、 彭敦()
对于范围内的侧面(4):
#使用side变量,我们可以指定平铺宽度或高度(side 0和2使用宽度,1和3使用高度)。
t、 向前((如果边%2,则平铺[“高度”];否则平铺[“宽度”])
t、 左(90)
#无论我们是否开始,结束填充。
t、 (完)
#停止在瓷砖之间画画。
t、 彭普()
乌龟
样品
是否可以在不使用“定义”的情况下创建棋盘?您的意思是不使用
drawblock
功能?是的。我试图通过不使用定义对象来创建棋盘来查看它在没有它的情况下是如何工作的