gpt4 book ai didi

python - 尝试在 Python 中使用 Turtle 绘制棋盘 - 如何填充其他方 block ?

转载 作者:太空宇宙 更新时间:2023-11-03 15:15:12 27 4
gpt4 key购买 nike

我想画一个棋盘。

我画了棋盘,但现在我必须定义一个函数(一个循环),用黑色填充每个其他方 block 。一段时间以来,我一直在尝试编写一个循环来执行此操作,有人可以帮忙吗?

这是我的代码:

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()

最佳答案

turtle 填充方法适用于形状,即完全有界的区域。因此,与其绘制网格,不如考虑绘制一系列正方形。

因此,让我们从定义一个简单的函数开始,以绘制一个填充的正方形。它需要一个 turtle 对象和一个边长大小。

import turtle

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、...)计数时,都需要使用模(余数)。 Modulo 表示余数,所以如果 x modulo y0 它意味着 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 使行正确交替。

通过定义一个行函数来实现这一点,该函数将在以黑色方 block 开始和以白色方 block 开始之间交替,然后从另一个循环中调用它。 (不要忘记在每次开始一行时回到开头并向下移动)。

关于python - 尝试在 Python 中使用 Turtle 绘制棋盘 - 如何填充其他方 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com