Как я могу нарисовать кучу квадратов?
-
25-10-2019 - |
Вопрос
Я очень новичок в Python. Мне нужно нарисовать эту форму для колледжа, но я нахожу это действительно сложным, поэтому я пытаюсь сделать квадрат, прежде чем выйти на это изображение.
В любом случае, вот мой вопрос: как я могу иметь 8 строк? (Есть 8 квадратов в 1 ряд) Я не могу продолжать добавлять 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
Несколько раз, чтобы нарисовать всю сетку.
Я не уверен, что это правильное направление для вас задания, но я надеюсь, что это указывает вам в правильном направлении.