Пошаговое руководство, посвященное изучению модуля Python Turtle.
Делиться

Начинающим пользователям Python достаточно знать, что они могут программировать функции, вводить итерации с помощью циклов и определять, какую программу выполнить, используя условные операторы, такие как if, elif и else. Но Python гораздо мощнее: он может получать доступ к файлам и обрабатывать их, создавать интересные игры, моделировать научные концепты, обрабатывать большие данные, генерировать модели машинного обучения и многое другое!
В этой статье мы будем использовать Python для создания графических результатов с помощью модуля Turtle. Это руководство для начинающих, которое научит вас рисовать фигуры и программировать рисование с помощью Python. Для дальнейшего изучения необходимо иметь глубокое понимание основ Python: базовых операторов, циклов, классов и объектов, а также доступа к модулям.
Модуль Turtle в Python
Модуль turtle в Python позволяет создавать графические изображения с помощью кода. Модуль предоставляет указатель, который можно настроить как черепашку (отсюда и название), а движение черепашки оставляет за собой след, рисуя фигуры и создавая визуальные узоры на экране. Модуль устанавливается вместе со стандартной библиотекой Python, а это значит, что нам не нужно устанавливать его самостоятельно. Доступ к его классам и функциям можно легко получить с помощью следующего оператора импорта:
из импорта черепахи *
Теперь давайте углубимся в изучение этого модуля, используя официальную документацию Python: https://docs.python.org/3/library/turtle.html
Основные команды черепашки
Как видно из приведенной выше документации, основные команды, которые мы можем отдавать нашей черепахе, следующие:
- Функция forward() указывает черепахе, на какое расстояние ей нужно переместиться вперед. В качестве аргумента она принимает целочисленное значение.
- Функция backward() указывает черепахе, на какое расстояние ей нужно переместиться назад. Она также принимает в качестве аргумента целочисленное значение.
- Функция `left()` указывает черепахе повернуться влево на определенный угол, который был передан функции в качестве аргумента.
- Функция right() указывает черепахе повернуться вправо на определенный угол, который был передан функции в качестве аргумента.
- Функция color() изменяет цвет черепашки в соответствии со строкой, переданной в качестве аргумента (например, «pink»). Здесь можно получить доступ к названиям цветов.
- Функция `width()` изменит ширину указателя на заданное целое число.
- Функция exitonclick() позволит нам закрыть экран, сгенерированный нашим кодом, простым щелчком мыши.
Запустите следующий код и измените его в соответствии с вашими потребностями, чтобы понять, что делает черепаха при вызове каждой из вышеуказанных функций.
from turtle import * color(«pink») width(5) forward(100) left(45) color(«blue») width(4) forward(100) left(45) forward(20) color(«red») width(4) forward(60) left(45) backward(50) color(«yellow») width() forward(100) right(45) exitonclick()

Использование объектно-ориентированной черепашьей графики
Теперь, когда мы рассмотрели, как работают основные функции модуля и как генерируется вывод, мы воспользуемся концепцией объектно-ориентированного программирования, описанной в документации, чтобы углубить наше понимание. Концепция классов и объектов, создаваемых с помощью конструктора, упрощает программирование сложных программ с переменными, имеющими схожие параметры, но разные значения. Именно здесь ООП оказывается полезным, и его использование в модуле позволит нам использовать более одной черепашки одновременно.
Для дальнейшего продвижения важно иметь базовое понимание классов и объектов, в частности, как создаются объекты с их атрибутами и методами.
Давайте создадим объекты «черепаха» и «экран»:
from turtle import Turtle, Screen my_turtle = Turtle() print(my_turtle)

Как видно на скриншоте выше, объект черепахи создан, и его местоположение определено. Теперь мы воспользуемся документацией для настройки нашей черепахи.
Мы определим форму, цвет и ширину нашей черепахи, используя следующий код:
my_turtle.shape(«turtle») my_turtle.color(«coral1») my_turtle.width(4)
Давайте также определим объект экрана и настроим его.
screen = Screen() screen.title('Рисование фигур с помощью модуля Turtle') screen.bgcolor(«white») screen.exitonclick()

Объект экрана был определен выше, и его заголовок и цвет фона были установлены соответствующим образом. Теперь перейдем к главной цели этого урока!
Рисование фигур
Теперь мы научимся рисовать разные фигуры с помощью нашей специально созданной черепашки!
Треугольник
Первой фигурой, которую мы нарисуем, будет треугольник. Его можно нарисовать, используя основные функции, которые мы обсуждали выше: forward и right. Мы знаем, что треугольник состоит из 3 сторон, и для равностороннего треугольника угол между каждой стороной равен 60 градусам. Мы можем нарисовать этот треугольник, используя следующие строки кода:
my_turtle.forward(200) my_turtle.right(120) my_turtle.forward(200) my_turtle.right(120) my_turtle.forward(200) my_turtle.right(120)

Как видите, мы успешно создали треугольник с помощью нашей черепахи. Обратите внимание, что мы установили угол, на который черепаха двигается вправо, равным 120, то есть оставшийся угол, который станет внутренним углом треугольника, будет равен 180 – 120 = 60. Это и было нашей целью. Мы будем работать аналогично для следующей фигуры.
Квадрат
Теперь мы с помощью нашей черепашки нарисуем квадрат. Поскольку у квадрата 4 стороны, мы будем использовать метод движения вперед 4 раза, устанавливая угол равным 360/4 = 90º всякий раз, когда используем правильный метод. Давайте также изменим цвет черепашки на темно-бирюзовый (Цвета черепашки).
Вот наш код для рисования квадрата:
my_turtle.color(«темно-бирюзовый») my_turtle.forward(200) my_turtle.right(90) my_turtle.forward(200) my_turtle.right(90) my_turtle.forward(200) my_turtle.right(90) my_turtle.forward(200) my_turtle.right(90)

Пентагон
Далее мы создадим пятиугольник, пятиугольную фигуру, у которой угол между сторонами равен 108 градусам. Это означает, что внешний угол будет равен 72 градусам. Мы внесем это в наш код, на этот раз используя 5 строк кода для 5 сторон. Мы также изменим цвет нашей черепахи.
my_turtle.color(«весенний зеленый») my_turtle.forward(150) my_turtle.right(72) my_turtle.forward(150) my_turtle.right(72) my_turtle.forward(150) my_turtle.right(72) my_turtle.forward(150) my_turtle.right(72) my_turtle.forward(150) my_turtle.right(72)

Как видно из приведенного выше блока кода, мы уменьшили скорость перемещения вперед с 200 до 150, чтобы пятиугольник можно было нарисовать в пределах экрана.
Создание алгоритма
Мы использовали модуль turtle для рисования треугольника, квадрата и пятиугольника. Как видно из приведенного выше примера, легко заметить закономерность. Черепашка движется вперед и вправо столько раз, сколько сторон у фигуры. Для рисования треугольника, то есть трехсторонней фигуры, черепашка движется вперед, затем вправо, затем снова вперед, затем вправо, затем снова вперед и снова вправо — всего 3 подхода движения вперед и вправо. Для квадрата тот же подход выполняется четыре раза, то есть столько раз, сколько сторон у фигуры. Аналогично и для пятиугольника. Таким образом, можно установить закономерность повторяющихся функций движения вперед и вправо. Можно задать фиксированное значение пройденного расстояния при каждом движении черепашки вперед. Что касается угла, заданного методом right, то, как и количество повторений операторов зависит от количества сторон фигуры, так и сам угол определяется количеством сторон. Этот внешний угол легко вычислить по следующей формуле:
Внешний угол = 360 / Количество сторон
Внешний угол треугольника будет равен 360/3 = 120. Внешний угол квадрата будет равен 360/4 = 90, и так далее. Это будет использоваться для ввода данных в правильный метод.
Определение функции
Теперь определим универсальную функцию, которая принимает количество сторон фигуры для её отрисовки. Если мы передадим в качестве аргумента 3, она создаст треугольник. Если мы передадим в качестве аргумента 8, она создаст восьмиугольник и так далее.
def draw_shapes(num_sides): angle = 360 / num_sides for i in range(num_sides): my_turtle.forward(50) my_turtle.right(angle)
Функция принимает количество сторон, вычисляет внешний угол, который передается в метод `right`, и выполняет методы `forward` и `right` столько раз, сколько сторон. Так, предположим, мы хотим нарисовать восьмиугольник, мы вызовем функцию и передадим ей число 8 в качестве аргумента. Мы также можем определить цвет фигуры:
my_turtle.color(«бледно-фиолетово-красный») draw_shapes(8)

Рисование фигур в заданном диапазоне
Теперь мы воспользуемся определенной выше функцией и циклом for для перебора диапазона чисел, каждое из которых соответствует стороне. Начнем с 3 для треугольника, и наша черепашка нарисует столько фигур, сколько мы захотим. Допустим, мы хотим нарисовать треугольник, квадрат, пятиугольник и так далее до десятиугольника, мы будем перебирать числа от 3 до 11, поскольку 11 исключено из диапазона цикла for.
Добавим также возможность рисовать каждую фигуру разным цветом. Для этого создадим список цветов, и цикл for будет перебирать цвета из этого списка.
my_colors = [«темно-серый», «ярко-розовый», «полуночно-синий», «оранжевый», «индиго», «темно-морской зеленый», «бежевый», «бледно-фиолетово-красный», «небесно-голубой», «весенний зеленый»]
После того как мы создадим список цветов, мы изменим нашу функцию, добавив в нее возможность изменения цвета, а затем пройдемся по диапазону цветов, чтобы нарисовать фигуры.
def draw_shapes(num_sides): angle = 360 / num_sides my_turtle.color(my_colors[3-num_sides]) for i in range(num_sides): my_turtle.forward(75) my_turtle.right(angle) for shape_size_n in range(3,11): draw_shapes(shape_size_n)

Заключение
В этом уроке мы изучили модуль Turtle, поняли его основные функции и концепцию ООП, а также использовали его для создания фигур. Это был урок по Python среднего уровня, требующий базового понимания классов и объектов, определения и вызова функций, а также настройки цветов с помощью Trinket. Это базовый пример того, что можно сделать с модулем Turtle. Мы можем изучить модуль подробнее и многому научиться в программировании с его помощью!
Источник: towardsdatascience.com



























