2011-11-28 56 views
1

我对python很陌生。我需要为大学画这个形状,但是我发现它很难,所以我想在进入那个形象之前做广场。如何绘制一串正方形?

无论如何,这里是我的问题:我怎么能有8行? (一排有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() 
+0

循环如何?您可以计算您的开始/结束坐标,并将它们作为参数传递给循环内的绘图函数。循环会根据需要遍历尽可能多的元素。 – milancurcic

+0

问问自己,这是什么画的?它与我的预期有什么不同? – KevinDTimm

回答

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!

+0

非常感谢。我设法让广场工作,但我无法弄清楚如何绘制该形状。我仍然在努力:) – emre

0

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

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

有了这个,你可以消除start_pos1()和正在重用的代码,这是很好的。

沿着这些路线,考虑为您的其他功能添加一些灵活性。例如,为什么没有draw_turtlerow需要一个数字来告诉它在该行中绘制了多少个正方形?然后你可以创建另一个需要你想要的行数的方法 - 这个函数会多次调用draw_turtlerowstart_pos来绘制整个网格。

我不确定这是否适合您的工作方向,但我希望它能指引您朝着正确的方向发展。