我怎么画一堆正方形?

时间:2011-11-28 21:57:38

标签: python turtle-graphics

我是python的新手。我需要为大学画这个形状,但我发现它真的很难,所以我想在进入那个图像之前做广场。

无论如何这里是我的问题:我怎么能有8行? (1行中有8个方格)我无法继续添加def start_point1():这不是正确的方法。

enter image description here

#!/usr/bin/python

import turtle as t
import time

def start_point():
    t.penup()
    t.setpos(-200,-240)
    t.pendown()

def start_point1():
    t.penup()
    t.setpos(-200,-180)
    t.pendown()

def draw_turtle():
    for a in range(4):
        t.forward(60)
        t.left(90)

def draw_turtlerow():
    for a in range(8):
        draw_turtle()
        t.forward(60)



def main():
    start_point()
    draw_turtlerow()
    start_point1()
    draw_turtlerow()

2 个答案:

答案 0 :(得分:8)

在这类问题中,你应该问问自己什么是“原子”操作 - 一遍又一遍地重复 - 将产生你的完整解决方案。你已经找到了你的基本“原子”:绘制正方形的一面:

t.forward(60)

现在,“原子性”的下一个级别是什么?好吧,重复四次,你可以得到一个正方形(正如你自己发现的那样)

for a in range(4):
    t.forward(60)
    t.left(90)

现在沿着同样的路线,你可能得出的结论是,如果你重复上述8次,你会得到一条线,如果你重复8次线,你将得到一个完整的检查板。它应该是这样的:

for col in range(8):
    for row in range(8):
        # draw a square here

现在,你已经为自己写了一个绘制正方形的函数,唯一的问题是你需要在不同的位置绘制它们。您必须关注的关键点是:您能否考虑从colrow的值开始计算此位置的方法?

如果您遇到困难,我发布了一个示例实施here我相信您不需要检查,但是如果您这样做,这是额外的任务:而不是按原样使用该代码,将调用中的内圈转换为单独的函数draw_square(row, col)

编辑:对于额外的积分和骄傲,一旦完成练习,观察检查板中的大多数线是如何反复重绘的。只需很少的努力,您就可以将程序的效率提高一倍。你能想到怎么样?

HTH!

答案 1 :(得分:0)

考虑向start_point添加参数,而不是创建新版本的。{1}} 功能。例如:

def start_point(x,y):
    t.penup()
    t.setpos(x,y)
    t.pendown()

有了这个,您可以消除start_pos1()并重新使用代码,这很好。

除此之外,还要考虑为其他功能添加一些灵活性。例如,为什么不让draw_turtlerow取一个数字来告诉它要在行中绘制多少个方块?然后你可以创建另一个方法来获取你想要的行数 - 然后这个函数会多次调用draw_turtlerowstart_pos来绘制整个网格。

我不确定这是你指派的正确方向,但我希望它指出你正确的方向。