Вопрос

Я очень новичок в Python. Мне нужно нарисовать эту форму для колледжа, но я нахожу это действительно сложным, поэтому я пытаюсь сделать квадрат, прежде чем выйти на это изображение.

В любом случае, вот мой вопрос: как я могу иметь 8 строк? (Есть 8 квадратов в 1 ряд) Я не могу продолжать добавлять 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()
Это было полезно?

Решение

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

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 Несколько раз, чтобы нарисовать всю сетку.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top