尝试在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