题
我是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()
解决方案
在这种问题中,您应该问自己,一遍又一遍地重复的“原子”操作将产生完整的解决方案。您已经找到了基本的“原子”:画一个正方形的一侧:
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
现在,您已经为自己写了一个正方形的功能,唯一的问题是您需要在不同的位置绘制它们。您必须关注的关键点是: 您能想到一种从价值开始计算此位置的方法吗 col
和 row
?
如果您卡住了,我发布了示例实现 这里, 我相信您不需要检查一下, ,但是如果这样做,这是额外的分配:而不是使用该代码原样,而是将内部圆圈转到单独的函数中 draw_square(row, col)
.
编辑: 为了加分和自豪,一旦完成练习, 观察检查板中的大多数线路一遍又一遍地重新编辑. 。几乎没有努力,您可以使程序的效率增加一倍。你能觉得如何吗?
恩!
其他提示
考虑将论点添加到 start_point
而不是创建函数的新版本。例如:
def start_point(x,y):
t.penup()
t.setpos(x,y)
t.pendown()
这样,您可以消除 start_pos1()
您正在重复使用代码,这很好。
沿着这些线路,请考虑为您的其他功能增加一些灵活性。例如,为什么没有 draw_turtlerow
以一个数字告诉它在行中绘制多少个正方形?然后,您可以制作另一种方法,以获取所需的行数 - 此功能将调用 draw_turtlerow
和 start_pos
几次绘制整个网格。
我不确定这是您分配的正确方向,但我希望它将您指向正确的方向。