【问题标题】:How can I draw a bunch of squares?我怎样才能画出一堆正方形?
【发布时间】:2011-11-28 21:57:38
【问题描述】:

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

无论如何,这是我的问题:我怎样才能有 8 行? (1 行有 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()

【问题讨论】:

  • 一个循环怎么样?您可以计算开始/结束坐标并将它们作为参数传递给循环内的绘图函数。一个循环会遍历尽可能多的元素。
  • 问问自己,这画了什么?与我的预期有何不同?

标签: python turtle-graphics


【解决方案1】:

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

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!

【讨论】:

  • 非常感谢。我设法让方块工作,但我不知道如何绘制那个形状。我还在努力:)
【解决方案2】:

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

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

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

按照这些思路,您还可以考虑为您的其他功能增加一些灵活性。例如,为什么不让draw_turtlerow 使用一个数字来告诉它要在一行中绘制多少个正方形?然后你可以创建另一个方法来获取你想要的行数——然后这个函数会调用draw_turtlerowstart_pos几次来绘制整个网格。

我不确定这是否是你分配的正确方向,但我希望它能为你指明正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    相关资源
    最近更新 更多