ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-22 05:08:36  阅读:707  来源: 互联网

标签:turtle-graphics loops python


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有