Рисование геометрических фигур в Python с модулем turtle
Введение

Модуль turtle — лёгкий и наглядный способ познакомиться с основами графики и программирования: перемещения, углы, циклы и параметризация. Небольшие программы с turtle удобно использовать в обучении, для прототипов или простых визуализаций.
Что такое turtle (в одну строку): это библиотека для пошагового управления «черепашкой», которая оставляет след пера при движении по координатной плоскости.
Важно: turtle подходит для обучения, прототипов и простых анимаций. Для производительных или профессиональных визуализаций применяют другие библиотеки.
Быстрый старт — создаём shapes.py
- Создайте файл shapes.py.
- В начале импортируйте модуль:
import turtle- Создайте окно-холст и задайте фон:
window = turtle.Screen()
window.bgcolor("white")- Создайте объект-черепашку и задайте форму и цвет:
turtle_1 = turtle.Turtle()
turtle_1.shape("turtle")
turtle_1.color("red")- В конце программы оставьте окно открытым, чтобы просмотреть результат:
window.exitonclick()- В терминале перейдите в папку с файлом, например в Windows:
cd C:\Users\Sharl\Desktop- Запустите скрипт:
python shapes.pyОсновы управления черепашкой
Коротко о ключевых методах:
- forward(distance) — движение вперёд на distance пикселей.
- backward(distance) — назад.
- left(angle) / right(angle) — поворот в градусах.
- penup() / pendown() — поднять/опустить перо (перестать/начать рисовать).
- goto(x, y) — перейти в координату (x, y).
- circle(radius) — нарисовать окружность с радиусом radius.
Совет: используйте небольшие пробные значения, чтобы понять направление «черепашки». По умолчанию она смотрит вправо (по положительному X).
Рисуем квадрат и прямоугольник
Принцип прост: четыре стороны и четыре поворота по 90°.
- Движение вперёд на 100:
turtle_1.forward(100)- Поворот направо на 90 и ещё 100 пикселей:
turtle_1.right(90)
turtle_1.forward(100)- Повторяем ещё два раза, чтобы замкнуть фигуру.
Для прямоугольника сделайте противоположные стороны разной длины:
turtle_1.forward(100)
turtle_1.right(90)
turtle_1.forward(200)
turtle_1.right(90)
turtle_1.forward(100)
turtle_1.right(90)
turtle_1.forward(200)Практическая подсказка: можно инкапсулировать рисование квадрата в функцию:
def draw_square(t, size):
for _ in range(4):
t.forward(size)
t.right(90)Рисуем треугольник
Обычный равносторонний треугольник можно получить поворотом на 120° три раза.
- Создаём новую черепашку:
turtle_2 = turtle.Turtle()
turtle_2.shape("arrow")
turtle_2.color("blue")- Перемещаемся в начало фигуры без рисования:
turtle_2.penup()
turtle_2.goto(-250, 200)
turtle_2.pendown()- Рисуем стороны:
turtle_2.forward(100)
turtle_2.left(120)
turtle_2.forward(100)
turtle_2.left(120)
turtle_2.forward(100)
turtle_2.left(120)Или компактно через цикл:
for i in range(3):
turtle_2.forward(100)
turtle_2.left(120)Совет по расположению: используйте goto(x,y) чтобы не накладывать фигуры друг на друга.
Рисуем окружность
Для окружностей есть функция circle(radius). Радиус указывается в пикселях.
turtle_3 = turtle.Turtle()
turtle_3.shape("circle")
turtle_3.color("green")
turtle_3.penup()
turtle_3.goto(-100, 50)
turtle_3.pendown()
turtle_3.circle(50)Замечание: circle() рисует круг против часовой стрелки при положительном радиусе.
Рисуем правильные многоугольники (шести-/восьмиугольник и другие)
Шаблон: угол поворота = 360 / количество сторон. Для шестиугольника поворот = 60°.
for i in range(6):
turtle_4.forward(100)
turtle_4.right(60)Для восьмиугольника — поворот 45°:
for i in range(8):
turtle_4.forward(100)
turtle_4.right(45)Пример создания многоугольника через функцию:
def draw_regular_polygon(t, sides, length):
angle = 360 / sides
for _ in range(sides):
t.forward(length)
t.right(angle)# Использование
polygon_t = turtle.Turtle()
polygon_t.color("purple")
polygon_t.penup()
polygon_t.goto(150, 200)
polygon_t.pendown()
draw_regular_polygon(polygon_t, 6, 100) # шестиугольникПолезные приёмы и оптимизации
- Скорость рисования: t.speed(value) — от 1 (медленно) до 10 (быстро) и special value 0 (максимум, без анимации). Для сложных фигур используйте speed(0).
- Размер пера: t.pensize(width).
- Цвета можно задавать именами, RGB-кортежами или шестнадцатеричным кодом: t.color((0.5, 0.2, 0.8)).
- Скрыть курсор: t.hideturtle(). Это полезно при финальном рендере.
- Ускорение рисования: прежде чем начать большое число отрисовок, можно выключить обновления экрана методом window.tracer(n, delay) и затем вызвать window.update().
Пример ускорения:
window.tracer(0) # выключаем автоматические обновления
# много рисования
window.update() # один раз обновляем экранШаблон: методология создания рисунка
- Спроектируйте композицию: сколько фигур, где будут центры, нужна ли сетка.
- Настройте холст: фон, размер окна, координаты начала.
- Напишите вспомогательные функции: draw_square, draw_circle, draw_regular_polygon.
- Тестируйте отдельные элементы: запустите с простыми размерами.
- Объедините и оптимизируйте: скрывайте черепашек, используйте tracer/update.
- Добавьте взаимодействие: кнопки, ввод размеров, рандомизацию цветов.
Контрпримеры — когда turtle не подходит
- Большие данные и визуализации (> тысячи объектов): производительность плохая.
- Профессиональный GUI или сложная анимация с физикой: лучше использовать Pygame, PyQt или специализированные движки.
- Серверный рендеринг без GUI: turtle требует окно, поэтому не подходит для headless-серверов.
Альтернатива для статичных изображений: использовать Pillow (PIL) или matplotlib для сохранения в файл.
Альтернативные подходы
- Pygame — для интерактивных игр и анимаций.
- tkinter.Canvas — если нужен GUI с виджетами и более гибким управлением.
- matplotlib — для графиков и научной визуализации (можно рисовать полигоны и окружности).
- Pillow — для создания и сохранения изображений (PNG, JPEG).
Практические проверки и критерии приёмки
- Скрипт запускается и не падает.
- Окно открывается и остаётся до клика мыши (window.exitonclick()).
- Рисунок корректно замкнут (для многоугольника первая и последняя точки совпадают визуально).
- Параметры (размер, цвет, положение) принимают ожидаемые значения при изменении.
Минимальные тесты (acceptance):
- Запустить shapes.py и убедиться, что видны квадрат, треугольник и окружность.
- Изменить размер квадрата на 50 и увидеть уменьшение.
- Для draw_regular_polygon(t, 5, 60) нарисуется пятилучная правильная фигура.
Чеклист для ролей
- Учитель: подготовить несколько примеров с увеличивающейся сложностью, комментарии и задания для студентов.
- Ученик/Начинающий: менять значения длины/углов, экспериментировать с цветами и формами.
- Разработчик: инкапсулировать рисунки в функции, добавить параметры и тесты.
Сниппет — быстрая шпаргалка
# Общие команды
t.forward(100)
t.left(90)
t.penup()
t.pendown()
t.goto(x, y)
t.circle(30)
t.speed(0)
t.hideturtle()Частые ошибки и как их избегать
- Ошибка: забыли window.exitonclick() — окно закрывается сразу. Исправление: добавить эту строку последней.
- Ошибка: неправильный угол для многоугольника. Правило: угол поворота = 360 / n.
- Ошибка: наложение фигур — используйте penup()/goto() для перемещений без рисования.
Краткая справка: термины (1 строка)
- Черепашка: объект turtle, рисующий линию; холст: окно Screen; пен: инструмент, оставляющий следы при pendown().
Заключение
Модуль turtle даёт интуитивный способ изучения графики и программирования: вы видите связь между командами движения и результатом на экране. Начните с простых фигур, инкапсулируйте повторяющийся код, затем переходите к параметрическим функциям и композициям. Если требуется производительность или сложная интерактивность, смотрите в сторону Pygame, tkinter или matplotlib.
Важно: используйте speed(0) и tracer/update при отрисовке множества объектов, а penup()/pendown() — при перемещениях, чтобы избежать ненужных линий.
Краткое резюме:
- Начиная с нескольких строк кода вы можете нарисовать любую правильную фигуру.
- angle = 360 / sides — основная формула для многоугольников.
- Для серьёзных задач выбирайте специализированные библиотеки.
Дополнительные идеи для практики: рисовать цветовую палитру, фракталы (например, кривую Коха), простую анимацию или генеративное искусство, где параметры фигур задаются случайным образом.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone