Черепашка turtle — рисуем фигуры
Главы 4 и 11 книги Дж. Бриггса "Python для детей". Дополнительные примеры — в Lab: Turtle, в статье Turtle (для старших) и в блоке Программа на Python.
Turtle (черепашка) — встроенный модуль Python для рисования линиями на экране. Модуль — готовый набор команд, который подключают через import turtle.
На экране появляется маленький исполнитель (черепашка). Вы даёте команды — "вперёд", "поверни налево" — и черепашка оставляет след. Так получается рисунок. Тот же принцип, что у кота в Scratch, только команды пишут текстом.
Пиксель — крошечная точка на экране. Команда forward(50) сдвигает черепашку на 50 пикселей и рисует линию.
Первые команды
Создайте файл turtle_demo.py и запустите в IDLE (F5) или через python turtle_demo.py:
import turtle
t = turtle.Pen() # "ручка" — объект, который рисует
t.forward(50) # вперёд на 50 пикселей
t.left(90) # поворот налево на 90 градусов
t.forward(50)
t.reset() # очистить холст и вернуть черепашку в центр
Основные команды:
forward(n)— пройти вперёд наnпикселей, оставив линиюbackward(n)— то же назадleft(градусы)— повернуть налевоright(градусы)— повернуть направоup()— поднять "перо", линия при движении не рисуетсяdown()— опустить перо, линия снова рисуетсяreset()— стереть всё и начать с центраclear()— стереть след, черепашка остаётся на месте
Градусы и повороты
Градус — единица измерения угла. Полный круг — 360°.
- стартовое положение — черепашка смотрит вправо (0°)
left(90)— смотрит вверхleft(180)илиright(180)— смотрит назадleft(90)даёт тот же поворот, чтоright(270)
Квадрат — четыре одинаковые стороны и четыре поворота на 90°. Удобно оформить циклом for (см. Введение в программирование):
import turtle
t = turtle.Pen()
for i in range(4):
t.forward(80)
t.left(90)
turtle.done() # окно останется открытым, пока Вы его не закроете
range(4) даёт четыре прохода цикла — ровно столько, сколько сторон у квадрата.
Несколько черепашек
Каждый вызов turtle.Pen() создаёт отдельный объект — свою черепашку со своим положением и направлением. Подробнее про объекты — в статье Классы и объекты.
import turtle
avery = turtle.Pen()
kate = turtle.Pen()
avery.forward(50)
avery.right(90)
kate.left(90)
kate.forward(100)
turtle.done()
avery и kate рисуют независимо друг от друга.
Функция для квадрата
Функция — именованный блок кода, который можно вызывать много раз. Вместо копирования четырёх строк пишем один раз:
import turtle
t = turtle.Pen()
def mysquare(size, filled):
if filled:
t.begin_fill()
for x in range(4):
t.forward(size)
t.left(90)
if filled:
t.end_fill()
t.color(0.2, 0.6, 1.0) # цвет в формате RGB от 0.0 до 1.0
mysquare(50, True) # закрашенный квадрат
mysquare(120, False) # только контур
turtle.done()
RGB (Red, Green, Blue) — три числа для красного, зелёного и синего. (0.2, 0.6, 1.0) — светло-синий. В веб-дизайне те же идеи — см. HTML и CSS.
Параметры функции:
size— длина стороны в пикселяхfilled—True, если квадрат нужно залить цветом
Звезда и остаток от деления
Оператор % возвращает остаток от деления. Выражение x % 2 == 0 проверяет, чётный ли номер шага цикла.
import turtle
t = turtle.Pen()
t.color(0.9, 0.75, 0)
for x in range(1, 19):
t.forward(100)
if x % 2 == 0:
t.left(175)
else:
t.left(225)
turtle.done()
На чётных шагах поворот 175°, на нечётных — 225°. Чередование углов даёт узор в виде звезды. В книге тот же цикл оборачивают в функцию mystar(size, filled) с begin_fill и end_fill.
Задания для практики
- Прямоугольник — две пары сторон разной длины (например, 100 и 40 пикселей)
- Равносторонний треугольник — три стороны и три поворота на 120° (120 + 120 + 120 = 360)
- Рамка без углов —
up(), сдвиг без линии,down(), короткий отрезок (гл. 4 книги) - Черепашьи вилы — четыре объекта
Pen(), четыре линии от одной точки (упражнение к гл. 8)
Соберите цепочку блоков ниже — тот же принцип "исполнитель + команды", что в Scratch и turtle.
Частые проблемы
| Проблема | Что сделать |
|---|---|
No module named tkinter | Turtle рисует через библиотеку tkinter. На Linux установите пакет python3-tk |
| Окно сразу закрывается | Добавьте turtle.done() в конец программы |
| Черепашка "зависла" | Закройте окно графики или перезапустите IDLE |
Связанные материалы
- Классы и объекты — почему
Pen()создаёт объект - Игра "Прыг-скок" — графика через tkinter
- Блоки и циклы — те же идеи в визуальной форме
- Примеры Turtle в Lab