Чтобы использовать модуль рисования turtle, нужно его импортировать в вашу программу. Для этого в начале программы записывается следующая инструкция:
from turtle import*
Таким образом мы из модуля turtle импортируем все функции и типы данных, которые в нём описаны (символ * как раз и означает, что импортируется всё содержимое модуля).
Работать с черепахой можно в процедурном или объектно-ориентированном стиле.
Процедурный стиль:
from turtle import*forward(60)left(45)forward(60)done()
В программу импортируются все объекты и функции для работы с черепашкой. Вызванные функции для движения и рисования выполняются созданным заранее объектом типа Turtle.
Объектно-ориентированный:
from turtle import*# создаём объект "Черепаха"t = Turtle() t.forward(60)t.left(45)t.forward(60)done()
Можно самостоятельно создать объект типа Turtle и вызывать методы этого объекта.
Объектно-ориентированный подход полезен в том случае, когда для рисования используют две и больше черепашек:
from turtle import *
alice = Turtle() # черепаха alice
bob = Turtle() # черепаха bob
# указываем для каждой черепахи
# свой набор действий
alice.forward(60)
alice.write("Я - alice")
bob.right(180)
bob.forward(60)
bob.write("Я - bob")
done()
Черепаха обладает рядом свойств: координаты на плоскости в которых она находится, курс - куда направлена её голова. Изначально черепаха появляется в точке с координатами (0, 0) и повёрнута вправо. Само поле для рисования представляет собой координатную плоскость, начало координат находится в центре окна, положительное направление оси x направлено вправо, положительное направление оси y направлено вверх.
Рисунок 1: Поле для рисования
Текущее расположение и направление черепах можно узнать с помощью следующих методов:
Таблица 1: Свойства черепахи
Свойство
Процедурный стиль
ООП стиль
Координата x Черепахи
xcor()
<черепаха>.xcor()
Координата y Черепахи
ycor()
<черепаха>.ycor()
Текущее направление Черепахи (в градусах)
heading()
<черепаха>.heading()
Движение черепахи
Управлять перемещением черепахи можно с помощью следующих методов:
Таблица 2: Методы для перемещения черепах
Метод
Назначение
forward(<пиксели>)
Движение вперёд на указанное количество пикселей в сторону, куда направлена Черепаха
backward(<пиксели>)
Движение назад на указанное количество пикселей
right(<градусы>)
Поворот Черепахи направо на указанное количество градусов
left(<градусы>)
Поворот Черепахи налево на указанное количество градусов
goto(x, y)
Переместить Черепаху в точку с координатами (x, y).
Методы forward() и backward() двигают черепаху на заданное количество пикселей вперёд и назад относительно текущего положения и по текущему направлению:
forward(25) аналогично backward(-25)
Если черепашка до этого находилась в точке с координатами (0, 0), вызов метода xcor() вернёт нам значение, равное 25.
Если указать отрицательное число в качестве аргумента метода backward(), то черепаха xпоедет вперёд.
С помощью метода goto() можно задать новые абсолютные координаты черепашки:
goto(-30, 42)
Черепашка переместиться в точку заданными координатами, а её направление не изменится. После выполнения инструкции из примера, черепашка окажется в точке с координатами (-30, 42).
Рисование
Во время движения, черепашка рисует свою траекторию движения. Для настройки пера используются следующие методы:
Таблица 3: Методы для настройки пера
Метод
Назначение
pensize(<пиксели>)
Изменяем толщину линии
penup()
Поднимаем перо. С этого момента линия не рисуется
pendown()
Опускаем перо. С этого момента линия рисуется
pencolor(<цвет>)
Меняем цвет пера. Метод может принимать строковый аргумент <цвет> - название одного из встроенных цветов
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fromturtleimport*
# список цветов
colors=["green","orange","blue","indigo","teal"]
foriinrange(40):
# толщина линии зависит от итерации цикла
pensize(i)
# циклически меняем цвет линии: 0,1,2,3,4,0,1,2...
from turtle import *
# список цветов
colors = ["green", "orange", "blue", "indigo", "teal"]
for i in range(40):
# толщина линии зависит от итерации цикла
pensize(i)
# циклически меняем цвет линии: 0,1,2,3,4,0,1,2...
pencolor(colors[i % 5])
# с каждой итерацией увеличиваем длину стороны
forward(i * 2)
left(35)
done()
Очерченный черепахой контур можно залить выбранным цветом.
Таблица 4: Методы для управления заливкой
Метод
Назначение
fillcolor(<цвет>)
Выбираем цвет заливки
begin_fill()
Обозначаем начало контура
end_fill()
Обозначаем конец контура. Если контур не замкнут, то две крайние точки соединяться отрезком
from turtle import *
speed(1)
fillcolor("blue")
begin_fill() # начало заливки
n = 5
for i in range(n):
forward(75)
left(360 // n)
end_fill() # конец заливки
done()
Библиотека цветов
На сайте trinket.io есть интерактивная библиотека цветов. Кликните на желаемый цвет и скопируйте его название, чтобы использовать его в методах pencolor() и fillcolor().
Примеры
Пример № 1 (ex01.py)
Изобразите следующий фрагмент мозаики. Стартовая точка обозначена красным цветом:
Фрагмент мозаики
Первый вариант решения
Нарисуем линии относительно текущей позиции черепашки.
from turtle import *
speed(2)
x = 0
y = 0
goto(x + 60, y + 0)
goto(x + 0, y + 60)
goto(x + 60, y + 60)
goto(x + 0, y + 0)
done()
В этом случае добавляем переменные x и y - координаты точки относительно которой будет рисовать фрагмент мозаики. Это пригодится нам для решения следующей задачи.
Стоит отметить, что направление черепашки после выполнения программы xне поменялось.
from turtle import *
speed(2)
w = 3 # ширина
h = 2 # высота
for x in range(0, 60 * w, 60):
for y in range(0, 60 * h, 60):
penup()
goto(x, y)
pendown()
forward(60)
left(135)
forward(85)
right(135)
forward(60)
right(135)
forward(85)
left(135)
done()
from turtle import *
speed(2)
w = 3
h = 2
for x in range(0, 60 * w, 60):
for y in range(0, 60 * h, 60):
penup()
goto(x, y)
pendown()
goto(x + 60, y + 0)
goto(x + 0, y + 60)
goto(x + 60, y + 60)
goto(x + 0, y + 0)
done()
Пример № 3 (ex03.py)
Создайте следующее изображение с помощью черепашки.
Составьте из предложенных блоков программу для рисования равностороннего треугольника с длинной стороны 100 пикселей. Стартовая точка обозначена красной окружностью.
Среди предложенных блоков есть лишние.
✔
from turtle import *
forward(100)
left(120)
forward(100)
left(120)
forward(100)
done()