Как я могу нарисовать кучу квадратов? - PullRequest
1 голос
/ 29 ноября 2011

Я очень плохо знаком с 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()

Ответы [ 2 ]

8 голосов
/ 29 ноября 2011

При возникновении подобных проблем вы должны спросить себя, что такое «атомарная» операция, которая - повторяющаяся снова и снова - генерирует ваше полное решение.Вы уже нашли свой основной «атом»: нарисовать сторону квадрата:

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).

РЕДАКТИРОВАТЬ: Для дополнительных очков и гордости, после выполнения упражнения, наблюдать, как большинство линий впроверочная доска перерисовывается снова и снова .С очень небольшим усилием вы можете удвоить эффективность вашей программы.Вы можете подумать, как?

HTH!

0 голосов
/ 29 ноября 2011

Попробуйте добавить аргументы в start_point вместо создания новых версий функции.Например:

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

С этим вы можете исключить start_pos1() и повторно использовать код, что хорошо.

Вдобавок к этому рассмотрите возможность добавления некоторой гибкости и к другим вашим функциям.Например, почему бы draw_turtlerow не взять число, которое говорит ему, сколько квадратов нарисовать в строке?Затем вы можете создать другой метод, который будет принимать количество строк, которое вы хотите - эта функция будет вызывать draw_turtlerow и start_pos несколько раз, чтобы нарисовать всю сетку.

Я не уверен, что это правильное направление для вашего задания, но я надеюсь, что оно направит вас в правильном направлении.

...