Python 我怎样才能画出一堆正方形?

Python 我怎样才能画出一堆正方形?,python,turtle-graphics,Python,Turtle Graphics,我对python非常陌生。我需要为大学画这个形状,但我发现它真的很难,所以在进入那个图像之前我试着画正方形 无论如何,我的问题是:我怎么能有8行?(一行中有8个正方形)我不能继续添加def start_point1():这不是正确的方法 #!/usr/bin/python import turtle as t import time def start_point(): t.penup() t.setpos(-200,-240) t.pendown() def st

我对python非常陌生。我需要为大学画这个形状,但我发现它真的很难,所以在进入那个图像之前我试着画正方形

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

#!/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()


考虑向
起点添加参数,而不是创建新版本的
功能。例如:

def start_point(x,y):
    t.penup()
    t.setpos(x,y)
    t.pendown()
这样,您就可以消除
start_pos1()
并重用代码,这很好

沿着这些线,考虑到你的其他功能也增加一些灵活性。例如,为什么不让
draw\u turtlerow
取一个数字,告诉它在这一行中要画多少个正方形?然后,您可以使用另一种方法来获取所需的行数-该函数将调用
draw\u turtlerow
start\u pos
多次来绘制整个网格


我不确定这是否是您作业的正确方向,但我希望它为您指明了正确的方向。

考虑向
起点添加参数,而不是创建新版本的
功能。例如:

def start_point(x,y):
    t.penup()
    t.setpos(x,y)
    t.pendown()
这样,您就可以消除
start_pos1()
并重用代码,这很好

沿着这些线,考虑到你的其他功能也增加一些灵活性。例如,为什么不让
draw\u turtlerow
取一个数字,告诉它在这一行中要画多少个正方形?然后,您可以使用另一种方法来获取所需的行数-该函数将调用
draw\u turtlerow
start\u pos
多次来绘制整个网格


我不确定这对你的任务来说是否是正确的方向,但我希望它为你指明了正确的方向。

在这种问题中,你应该问问自己,什么是“原子”操作——反复重复——将生成完整的解决方案。您已经找到了基本的“原子”:绘制正方形的边:

t.forward(60)
那么,“原子性”的下一个层次是什么?好吧,每边重复四次,你可以得到一个正方形(正如你自己正确发现的那样)

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

for col in range(8):
    for row in range(8):
        # draw a square here
现在,您已经编写了绘制正方形的函数,唯一的问题是您需要在不同的位置绘制每个正方形。这里您必须关注的关键点是:您能想出一种方法,从
col
row
的值开始计算此位置吗?

如果您陷入困境,我发布了一个示例实现,我相信您不需要检查它,但是如果您检查了,这里有一个额外的任务:在调用一个单独的函数
draw_square(row,col)
时,不要按原样使用该代码,而是转动内圈

编辑:为了获得额外的分数和自豪感,完成练习后,观察检查板中的大多数线条是如何反复绘制的。只需很少的努力,您就可以将程序的效率提高一倍。你能想想怎么做吗


在这类问题中,你应该问问自己,什么是“原子”操作——反复重复——将生成完整的解决方案。您已经找到了基本的“原子”:绘制正方形的边:

t.forward(60)
那么,“原子性”的下一个层次是什么?好吧,每边重复四次,你可以得到一个正方形(正如你自己正确发现的那样)

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

for col in range(8):
    for row in range(8):
        # draw a square here
现在,您已经编写了绘制正方形的函数,唯一的问题是您需要在不同的位置绘制每个正方形。这里您必须关注的关键点是:您能想出一种方法,从
col
row
的值开始计算此位置吗?

如果您陷入困境,我发布了一个示例实现,我相信您不需要检查它,但是如果您检查了,这里有一个额外的任务:在调用一个单独的函数
draw_square(row,col)
时,不要按原样使用该代码,而是转动内圈

编辑:为了获得额外的分数和自豪感,完成练习后,观察检查板中的大多数线条是如何反复绘制的。只需很少的努力,您就可以将程序的效率提高一倍。你能想想怎么做吗


打个圈怎么样?可以计算起点/终点坐标,并将其作为参数传递给循环中的绘图函数。一个循环可以遍历任意多个元素。问问你自己,这画了什么?它和我期望的有什么不同?一个循环怎么样?可以计算起点/终点坐标,并将其作为参数传递给循环中的绘图函数。一个循环可以遍历任意多个元素。问问你自己,这画了什么?这和我期望的有什么不同?非常感谢。我设法使正方形工作,但我不知道如何画出那个形状。我还在努力:)非常感谢。我设法使正方形工作,但我不知道如何画出那个形状。我还在努力:)