Рисование с turtle: от простых линий до сложных проектов

Раздел: Библиотеки -> Графика: turtle

Основы работы с модулем turtle

Базовый подход: импорт, создание окна и черепашки

Модуль turtle входит в стандартную библиотеку Python и не требует дополнительной установки. Для начала работы достаточно импортировать его и создать объект черепашки. Самый простой способ - использовать import turtle и вызвать turtle.Turtle(). При этом автоматически открывается графическое окно.

import turtle

t = turtle.Turtle()
t.forward(100)   # движение вперёд на 100 пикселей
t.right(90)      # поворот направо на 90 градусов
t.forward(100)

turtle.done()    # завершение работы, окно остаётся открытым

модуль черепашка python (модуль turtle (черепашка) python)

Команда turtle.done() (или turtle.mainloop()) обязательна, иначе окно закроется сразу после выполнения скрипта. Базовые методы: forward(distance), backward(distance), left(angle), right(angle). Для изменения цвета пера используется t.pencolor('red'), для заливки - t.fillcolor('blue') и пары begin_fill()/end_fill().

Типичные проблемы и их решения:

  • Окно мгновенно закрывается. Решение: добавьте turtle.done() в конце кода.
  • Черепашка рисует не там, где ожидается. Проверьте начальное положение (центр экрана 0,0). Используйте t.goto(x, y) для точного перемещения.
  • Команды не работают после первого запуска. Убедитесь, что не происходит переопределение объекта. После turtle.done() окно остаётся активным, но новые команды не обрабатываются; для повторного рисования запустите скрипт заново.

Как нарисовать правильный многоугольник?

Для рисования правильного многоугольника с заданным числом сторон n используется цикл: каждая сторона длины l, поворот на 360/n градусов.

import turtle

t = turtle.Turtle()
n = 6            # шестиугольник
l = 50
for _ in range(n):
    t.forward(l)
    t.right(360 / n)

turtle.done()

Для окружности можно использовать t.circle(radius) - черепашка рисует окружность заданного радиуса, начиная снизу. Параметр extent позволяет нарисовать только часть дуги.

Возможные ошибки:

  • Многоугольник искажается. Убедитесь, что угол поворота равен 360/n. Для треугольника угол 120, для квадрата 90.
  • Окружность рисуется медленно. t.speed('fastest') ускоряет черепашку.

Как заставить черепашку двигаться непрерывно?

Для анимации используется цикл с изменением координат и командой t.heading(). Простейший вариант - бесконечное движение по прямой с отскоком от границ окна.

import turtle

t = turtle.Turtle()
t.speed('fastest')
dx, dy = 2, 0   # движение только по оси X

while True:
    t.forward(dx)
    x, y = t.position()
    if abs(x) > 200:   # отскок от края
        t.right(180)
    turtle.update()   # необязательно, но улучшает анимацию

Обратите внимание: для корректной работы анимации окно не должно закрываться, а цикл должен прерываться по условию. Лучше использовать turtle.tracer(0) и ручной вызов turtle.update() для контроля кадров.

Частая проблема:

  • Бесконечный цикл зависает. Добавьте проверку на нажатие клавиши (например, ESC) через turtle.onkeypress() и turtle.listen(), чтобы выйти из цикла.

Как управлять черепашкой с клавиатуры?

Модуль turtle поддерживает обработку событий клавиш. Регистрация функций обратного вызова осуществляется через turtle.onkeypress(funkcija, 'klavisha'), после чего вызывается turtle.listen() для захвата фокуса.

import turtle

t = turtle.Turtle()
t.speed('fastest')

def vpered():
    t.forward(10)

def nazad():
    t.backward(10)

def vlevo():
    t.left(15)

def vpravo():
    t.right(15)

turtle.onkeypress(vpered, 'Up')
turtle.onkeypress(nazad, 'Down')
turtle.onkeypress(vlevo, 'Left')
turtle.onkeypress(vpravo, 'Right')

turtle.listen()
turtle.done()

Клавиши задаются строковыми обозначениями: 'Up', 'Down', 'Left', 'Right', 'space', 'a', 'b' и т.д. Для отслеживания отпускания используется onkeyrelease.

Ошибки:

  • События не обрабатываются. Проверьте вызов turtle.listen() и то, что окно активно (не свернуто).
  • Реакция на клавиши запаздывает. Установите turtle.tracer(0) и обновляйте экран вручную.

Расширенные примеры с модулем turtle

Спираль Архимеда

Рисование спирали с увеличивающимся радиусом. Каждый шаг черепашка движется вперёд и поворачивает на небольшой угол.

Пример
import turtle

t = turtle.Turtle()
t.speed('fastest')
for i in range(100):
    t.forward(i * 0.5)   # постепенное увеличение длины
    t.right(30)
turtle.done()
На экране появится спираль, раскручивающаяся от центра.

Снежинка Коха (фрактал)

Рекурсивное построение кривой Коха. Функция koch(n, l) рисует отрезок длины l с n итерациями.

Пример
import turtle

def koch(n, l):
    if n == 0:
        t.forward(l)
    else:
        koch(n-1, l/3)
        t.left(60)
        koch(n-1, l/3)
        t.right(120)
        koch(n-1, l/3)
        t.left(60)
        koch(n-1, l/3)

t = turtle.Turtle()
t.speed('fastest')
t.penup()
t.goto(-200, 100)
t.pendown()
for _ in range(3):
    koch(3, 400)
    t.right(120)
turtle.done()
Получается снежинка Коха - замкнутая фрактальная кривая с тремя выступами.

Дерево Пифагора (рекурсивное дерево)

Рекурсивное рисование дерева: каждая ветвь делится на две под углом.

Пример
import turtle

def tree(dlina):
    if dlina < 10:
        return
    t.forward(dlina)
    t.left(30)
    tree(dlina * 0.7)
    t.right(60)
    tree(dlina * 0.7)
    t.left(30)
    t.backward(dlina)

t = turtle.Turtle()
t.speed('slowest')
t.left(90)
tree(100)
turtle.done()
Изображается дерево с разветвлениями, утончающимися к концам.

График функции синуса

Построение графика sin(x) с переносом черепашки в нужные точки.

Пример
import turtle
import math

t = turtle.Turtle()
t.speed('fastest')
t.penup()
x0 = -300
t.goto(x0, 0)
t.pendown()
for x in range(-300, 301):
    y = 50 * math.sin(math.radians(x))
    t.goto(x, y)
turtle.done()
На окне будет нарисован синусоидальный график с амплитудой 50.

Игра «Собери яблоко» (элементарная интерактивность)

Черепашка управляется стрелками, яблоко (ещё одна черепашка) появляется случайно. При столкновении счёт увеличивается.

Пример
import turtle
import random

# настройки
turtle.tracer(0)
okno = turtle.Screen()
okno.setup(500, 500)

# черепашка-игрок
gracz = turtle.Turtle()
gracz.shape('turtle')
gracz.speed('fastest')

# яблокo
yabloko = turtle.Turtle()
yabloko.shape('circle')
yabloko.color('red')
yabloko.penup()
yabloko.goto(random.randint(-200, 200), random.randint(-200, 200))

def w_gore():
    gracz.setheading(90)
    gracz.forward(10)

def w_dol():
    gracz.setheading(270)
    gracz.forward(10)

def w_lewo():
    gracz.setheading(180)
    gracz.forward(10)

def w_prawo():
    gracz.setheading(0)
    gracz.forward(10)

turtle.onkeypress(w_gore, 'Up')
turtle.onkeypress(w_dol, 'Down')
turtle.onkeypress(w_lewo, 'Left')
turtle.onkeypress(w_prawo, 'Right')
turtle.listen()

while True:
    if gracz.distance(yabloko) < 20:
        yabloko.goto(random.randint(-200, 200), random.randint(-200, 200))
    turtle.update()
Игрок управляет черепашкой, при касании красного круга он перемещается в новое случайное место.

Модуль turtle (черепашка) Python - comments

En
модуль черепашка python (python)