编程语言
首页 > 编程语言> > 尝试在Python中使用Turtle绘制棋盘格-如何填充其他所有正方形?

尝试在Python中使用Turtle绘制棋盘格-如何填充其他所有正方形?

作者:互联网

Python的新手,我正在尝试绘制棋盘格.我画了板子,但是现在我必须定义一个函数(一个循环),用黑色填充每个其他正方形.我一直在尝试编写一个循环来执行此操作,有人可以帮忙吗?

这是我的代码:

import turtle


def drawGrid():
turtle.penup()
turtle.goto(-300, 250)
turtle.pendown()
turtle.forward(300)
turtle.right(90)
turtle.forward(300)
turtle.right(90)
turtle.forward(300)
turtle.right(90)
turtle.forward(300)

def drawColumns():
for i in range(4):
    turtle.right(90)
    turtle.forward(37.5)
    turtle.right(90)
    turtle.forward(300)
    turtle.left(90)
    turtle.forward(37.5)
    turtle.left(90)
    turtle.forward(300)

def drawRows():
turtle.left(180)
rows = 0 
while rows <= 3:
    rows += 1
    turtle.forward(37.5)
    turtle.right(90)
    turtle.forward(300)
    turtle.left(90)
    turtle.forward(37.5)
    turtle.left(90)
    turtle.forward(300)
    turtle.right(90)

def main():
drawGrid()
drawColumns()
drawRows()
if __name__ == "__main__":
main()

感谢您的所有帮助!

解决方法:

乌龟填充方法适用于形状,即完全包围的区域.因此,与其绘制网格,不如考虑绘制一系列正方形.

因此,让我们先定义一个简单的函数来绘制一个填充的正方形.它需要一个乌龟对象,其大小为边的长度.
    进口龟

def draw_filled_square(this_turtle, size):    
    """Draw a square by drawing a line and turning through 90 degrees 4 times"""
    this_turtle.pendown()
    this_turtle.fill(True)
    for _ in range(4):
        this_turtle.forward(size)
        this_turtle.right(90)
    this_turtle.fill(False)
    this_turtle.penup()

我们可以这样称呼它:

window = turtle.Screen()
myturtle = turtle.Turtle()
square_size = 90
myturtle.goto(-300, 200)

draw__filled_square(myturtle, square_size)

绘制一个正方形.请注意,它将其放回起始位置,因此我们需要在绘制下一个正方形之前先将其移动.

现在,在实践中,只要绘制框的轮廓,我们只需要绘制实心正方形,未实心正方形可以表示负空间.但是出于解释的目的,我还将画出它们.

为未填充的正方形定义函数很容易-只需复制现有函数,但在开始处设置this_turtle.fill(False)即可.

每当需要按重复序列(1,2,3,4,1,2,3,4 …)进行计数时,都需要使用模(余数).模数是余数,因此如果x模y为0,则意味着x可以被y整除.这将转换为代码,好像x%y == 0:

这是一个简单的鼓机来演示:

def drum_loop(x):
     # go bang on the fourth beat
     if x % 4 == 0:
         print("bang!")
     else:
         print("tish")

# prints tish, tish, tish, bang! tish, tish, tish, bang!
for i in range(1,9):
   drum_loop(i)

交替就像重复计数0、1、0、1.

所以我们可以这样画一行:

for i in range(8): 
    if i % 2 == 0:
        draw_filled_square(myturtle, square_size)
    else:
        draw_unfilled_square(myturtle, square_size)
    # move to start of next square
    myturtle.forward(square_size)

现在只重复一次并不能解决问题,但是很明显,您可以再次使用模2来使行正确交替.

为此,可以定义一个行函数,该函数将在以黑色方块开头和以白色方块开头之间交替,然后从另一个循环中调用它. (不要忘了回到起点并在每次开始一行时都向下移动).

标签:turtle-graphics,loops,python
来源: https://codeday.me/bug/20191122/2057242.html