Скидки до 60% и 3 курса в подарок 0 дней 00 :00 :00 Выбрать курс
Код
#статьи

Модуль Turtle в Python

Учимся программировать вместе с виртуальной черепахой.

Иллюстрация: Оля Ежак для Skillbox Media

Модуль turtle — это библиотека Python, которая помогает новичкам изучать программирование с помощью визуального рисования. В ней вы можете управлять виртуальной черепашкой и заставить её проползти на 100 шагов вперёд, повернуть на 90 градусов вправо и выполнить другие команды. Комбинирование таких простых действий позволяет создавать различные геометрические фигуры и сразу видеть результат на экране. Давайте подключим этот модуль и попробуем с ним поработать.

Содержание


Установка и настройка Turtle

Модуль turtle входит в стандартную библиотеку Python и относится к категории Program Frameworks. Такие модули задают базовую структуру кода с помощью набора готовых инструментов и правил. Например, в turtle нельзя просто нарисовать прямую линию. Для этого черепашке нужно доползти до начальной точки, повернуться в нужную сторону и только после этого проползти вперёд, оставляя за собой след.

Чтобы работать со стандартной библиотекой, сначала установите Python для своей операционной системы и выберите редактор кода. Подойдут PyCharm, Visual Studio Code, IDLE или любой другой редактор с графическим интерфейсом. Однако учтите, что модуль turtle не поддерживается на мобильных платформах и работает с ограничениями во многих онлайн-интерпретаторах вроде Jupyter Notebook или Replit.

После установки редактора создайте новый файл с расширением .py, задайте ему имя (например, drawing.py) и добавьте следующую строку:

import turtle

С этого момента модуль turtle подключён и готов к работе. Для проверки вы можете вставить в файл следующий код и запустить его, — если всё настроено правильно, черепашка нарисует звезду в отдельном окне:

import turtle

turtle.color('red', 'yellow')
turtle.begin_fill()
while True:
    turtle.forward(200)
    turtle.left(170)
    if abs(turtle.pos()) < 1:
        break
turtle.end_fill()
turtle.done()
Для запуска кода через терминал VS Code выполните команду py имя_файла.py
Скриншот: Visual Studio Code / Skillbox Media

Как управлять движением черепашки

Черепашку можно перемещать двумя способами: с помощью простых команд (вперёд, назад, поворот) или через указание координат (X, Y). В этом разделе мы кратко рассмотрим оба подхода, а затем перейдём к дополнительным функциям. Для более глубокого изучения советуем добавить в закладки официальную документацию Turtle graphics — в ней подробно описаны все команды и особенности работы с модулем turtle.

Начнём с основных команд, которыми вы будете пользоваться чаще всего:

  • forward(длина) — двигает черепашку вперёд. Например, по команде forward (50) та продвинется на 50 пикселей и оставит за собой линию.
  • backward(длина) — двигает назад на заданное расстояние.
  • right(угол) — поворачивает вправо на указанный угол. Так, команда right(90) развернёт черепашку на 90 градусов по часовой стрелке.
  • left(угол) — поворачивает влево на указанный угол.
  • penup() — поднимает виртуальное перо, чтобы черепашка не оставляла след на экране.
  • pendown() — опускает перо, чтобы снова появлялась линия.
  • circle (радиус) — рисует окружность заданного радиуса.
  • exitonclick() — оставляет окно с рисунком открытым до тех пор, пока вы не кликнете мышью.
  • done() — завершает выполнение программы и оставляет окно с рисунком открытым.

Новички часто забывают добавить в конце программы команду done() или exitonclick(). Без них окно с рисунком быстро откроется и закроется сразу после выполнения кода, — вы не успеете ничего увидеть:

import turtle

# Cоздаём объект черепашки
t = turtle.Turtle()

# Рисуем линию длиной 100 пикселей
t.forward(100)

А теперь добавим в конце команду, и окно никуда не денется:

turtle.done()

Рабочее поле черепашки — это обычная координатная плоскость. По горизонтали идёт ось X (слева направо), по вертикали — ось Y (снизу вверх). В центре находится точка (0, 0), откуда черепашка начинает путь:

  • goto(x, y) — перемещает в указанную точку с координатами (X, Y). Например, goto (100, 50) переместит вас в точку, где x = 100, y = 50.
  • setx(x) — меняет координату X для перемещения по горизонтали.
  • sety(y) — меняет координату Y для перемещения по вертикали.
  • setheading(угол) — задаёт направление движения: 0 — вправо, 90 — вверх, 180 — влево, 270 — вниз.
  • home() — возвращает черепашку в центр поля (0, 0) и устанавливает направление вправо.

Теперь объединим оба способа управления черепашкой. Сначала нарисуем квадрат с помощью базовых команд движения, а затем переместимся в новую позицию по координатам и нарисуем круг:

import turtle

# Cоздаём объект черепашки
t = turtle.Turtle()

# Рисуем квадрат
for _ in range(4):
    t.forward(100)
    t.left(90)

# Перемещаем черепашку для нового рисунка
t.penup()
t.goto(-150, 0)
t.pendown()

# Рисуем окружность радиусом 50 пикселей
t.circle(50)

turtle.done()

В результате вы должны увидеть две фигуры на одном поле:

Скриншот: Visual Studio Code / Skillbox Media

Расширенные функции Turtle

До этого мы использовали только базовые возможности модуля turtle, которые заданы по умолчанию. Для создания более сложных узоров вы можете настраивать различные параметры отрисовки: цвет, размер, скорость и другие характеристики. Рассмотрим некоторые из них.

Цвет и заливка. Вы можете отдельно настраивать цвет пера (линии) и цвет заливки фигуры. Для этого можно использовать имена цветов на английском языке (red, blue, green) или их значения в HEX-формате — например, #FF0000 (красный), #00FF00 (зелёный), #0000FF (синий).

Обратите внимание: заливка работает только с замкнутыми фигурами: кругами, квадратами и многоугольниками. Она не применяется к незамкнутым линиям, спиралям и также не сработает, если между командами begin_fill() и end_fill() у вас появится разрыв в линии.

import turtle

t = turtle.Turtle()

t.pencolor("blue")      # Цвет линии
t.fillcolor("lightblue") # Цвет заливки

t.begin_fill()      # Начинаем заливку
t.circle(80)        
t.end_fill()        # Завершаем заливку

turtle.done()
Скриншот: Visual Studio Code / Skillbox Media

Скорость, форма и отображение. Благодаря этим параметрам вы можете управлять тем, как черепашка рисует фигуры на экране:

  • t.speed(n) задаёт скорость движения черепахи. Можно указать значения от 1 (очень медленно) до 10 (максимально быстро). При значении 0 рисунок появляется мгновенно, без анимации.
  • t.shape(«turtle») меняет форму курсора. Вот доступные варианты: turtle (черепашка), arrow (стрелка), circle (круг), square (квадрат), triangle (треугольник) и classic (классический).
  • Команда t.hideturtle() позволяет временно скрыть черепашку во время рисования, что ускоряет процесс. Затем вы можете использовать t.showturtle(), чтобы она снова появилась.
  • Для сложных фигур можно отключить анимацию командой turtle.tracer(0), а после завершения всех действий вызвать turtle.update(). Это ещё один способ ускорить процесс отрисовки.

Поэкспериментируем с настройками и нарисуем две новые фигуры:

import turtle

t = turtle.Turtle()

# Меняем форму курсора со «стрелки» на «черепашку» 
t.shape("turtle")
t.speed(7)
t.color("green", "yellow")

t.begin_fill()
for _ in range(6):     # Рисуем правильный жёлтый шестиугольник
    t.forward(100)
    t.left(60)
t.end_fill()

t.penup()
t.goto(-150, 0)
t.pendown()

# Скрываем черепашку и создаём красный треугольник
t.hideturtle()
t.color("red", "orange")
t.begin_fill()
for _ in range(3):
    t.forward(80)
    t.left(120)
t.end_fill()
t.showturtle()

turtle.done()
Вместо стрелки по умолчанию у нас появилась настоящая «черепашка». Теперь наконец понятно, почему модуль называется «черепашьей графикой»
Скриншот: Visual Studio Code / Skillbox Media

Отслеживание событий. Вы можете настроить черепашку так, чтобы она реагировала на нажатия клавиш и клики мыши:

  • turtle.listen() — эта команда включает прослушивание событий от клавиатуры и мыши.
  • turtle.onkeypress(func, key) — привязывает функцию к нажатию определённой клавиши.
  • turtle.onclick(func) — позволяет обрабатывать щелчок мыши по самой черепашке.
  • turtle.onscreenclick(func) — реагирует на щелчок мыши в любой точке экрана и передаёт координаты точки в функцию-обработчик.

Для закрепления изученных команд ниже мы создадим программу, которая позволит управлять черепахой с помощью клавиш-стрелок:

import turtle

# Создаём объект черепашки и настраиваем её внешний вид
t = turtle.Turtle()
t.shape("turtle")   
t.speed(0)          

# Настраиваем функции управления  
def move_forward():
    t.forward(30)  # Двигаемся вперёд на 30 пикселей

def move_backward():
    t.backward(30)  # Двигаемся назад на 30 пикселей

def turn_left():
    t.left(30)  # Поворачиваем влево на 30°

def turn_right():
    t.right(30)  # Поворачиваем вправо на 30°

def reset_position():
    t.penup()       
    t.home()        
    t.pendown()     

# Включаем прослушивание событий клавиатуры
turtle.listen()

# Назначаем действия на определённые клавиши:
turtle.onkeypress(move_forward, "Up")  # Стрелка вверх — вперёд
turtle.onkeypress(move_backward, "Down")  # Стрелка вниз — назад
turtle.onkeypress(turn_left, "Left")  # Стрелка влево — повернуть влево
turtle.onkeypress(turn_right, "Right")  # Стрелка вправо — повернуть вправо
turtle.onkeypress(reset_position, "space")  # Пробел — вернуться в центр

turtle.done()
Теперь черепашка полностью под нашим управлением:
Скриншот: Visual Studio Code / Skillbox Media

Работа с несколькими объектами. Вы можете создать несколько черепашек и управлять каждой из них по отдельности. Это пригодится при разработке анимаций или простых игр, где различные элементы (например, игрок или мяч) представлены отдельными объектами.

Для примера ниже мы создадим красную и синюю черепашек, которые будут двигаться по разным траекториям:

import turtle

# Создаём первую черепашку (красная)
t1 = turtle.Turtle()
t1.color("red")         
t1.shape("turtle")      

# Создаём вторую черепашку (синяя)
t2 = turtle.Turtle()
t2.color("blue")        
t2.shape("turtle")      

# Первая черепашка движется вправо на 100 пикселей
t1.forward(100)

# Вторая черепашка поворачивает вверх и двигается на 100 пикселей
t2.left(90)
t2.forward(100)

# Перемещаем первую черепашку в точку (-100, -100) без линии
t1.penup()              
t1.goto(-100, -100)     
t1.pendown()            

# Перемещаем вторую черепашку в точку (100, -100) без линии
t2.penup()
t2.goto(100, -100)
t2.pendown()

# Первая черепашка рисует круг радиусом 50 пикселей
t1.circle(50)

# Вторая черепашка поворачивает и движется ещё на 70 пикселей
t2.right(45)
t2.forward(70)

turtle.done()
Скриншот: Visual Studio Code / Skillbox Media

Алгоритмические узоры и фракталы. С помощью циклов, функций и вложенных фигур вы можете визуализировать разные математические закономерности. Например, модуль random позволяет создать фрактал «папоротник Барнсли», который напоминает настоящее растение.

В этом фрактале каждая новая точка вычисляется на основе положения предыдущей — как будто мы рисуем картинку по точкам. Одни точки образуют стебель, другие — листочки. Постепенно из тысяч таких точек складывается красивый рисунок, похожий на папоротник. Попробуйте:

import turtle
import random

# Создаём функцию для построения фрактала 
def barnsley_fern(t, iterations):
    x, y = 0, 0  # Начальные координаты 
    for _ in range(iterations):
        r = random.random()  # Генерируем случайное число от 0 до 1
        # В зависимости от значения r выбираем одну из четырёх формул для новой точки
        if r < 0.01:
            x, y = 0, 0.16 * y                  # Стебель папоротника
        elif r < 0.86:
            x, y = 0.85 * x + 0.04 * y, -0.04 * x + 0.85 * y + 1.6   # Основная масса листьев
        elif r < 0.93:
            x, y = 0.2 * x - 0.26 * y, 0.23 * x + 0.22 * y + 1.6    # Левые листики
        else:
            x, y = -0.15 * x + 0.28 * y, 0.26 * x + 0.24 * y + 0.44 # Правые листики
        
        # Перемещаемся к новой точке 
        t.goto(x * 50, y * 50 - 200)
        t.dot(2, "yellow")  # Ставим точку диаметром 2 пикселя жёлтым цветом

screen = turtle.Screen()
screen.bgcolor("black")   

t = turtle.Turtle()
t.speed(0)                
turtle.tracer(0)          
t.hideturtle()            
t.penup()                 

barnsley_fern(t, 50000)   # Используем 50 000 точек для красивого результата
turtle.update()           
turtle.done()
Скриншот: Visual Studio Code / Skillbox Media

Читайте также:

Модуль random в Python

Пример применения

В предыдущих разделах вы познакомились с базовыми и расширенными возможностями модуля turtle: управлением, событиями, работой с несколькими объектами и случайными числами. Теперь попробуйте объединить эти возможности и реализовать игру «Поймай черепашку».

Вам нужно создать на игровом поле двух черепашек. Первая будет вашей — настройте для неё управление с помощью клавиш и мышки. Второй черепашкой пусть управляет компьютер — она должна случайно перемещаться по экрану и убегать от вас. Цель игры — догнать убегающую черепашку, вывести сообщение о победе и завершить программу.

Скриншот: Visual Studio Code / Skillbox Media

Подсказки

  • Чтобы убегающая черепашка перемещалась по полю, создайте функцию, которая будет раз в несколько сотен миллисекунд случайным образом выбирать новую позицию и переносить черепашку туда. Для генерации случайных координат вы можете использовать модуль random (например, функцию random.randint), а чтобы задавать паузу между прыжками — функцию ontimer.
  • Проверяйте расстояние между черепахами с помощью метода .distance(). Если оно становится меньше заданного порога (например, 20 пикселей), считайте, что вы поймали черепашку. После скройте обеих черепашек и не давайте им больше двигаться.
  • Для вывода сообщения создайте отдельную «невидимую» черепашку или воспользуйтесь методом .write() у одной из уже созданных.

Код игры

import turtle
import random

FIELD_SIZE = 300          
JUMP_INTERVAL = 500       
CATCH_DISTANCE = 20       

# Создаём игровое окно 
screen = turtle.Screen()
screen.title("Поймай черепашку!")       
screen.bgcolor("#f0f0f0")                
screen.setup(width=700, height=700)      

# Создаём черепашку-игрока (красная) 
player = turtle.Turtle()
player.shape("turtle")                
player.color("red")                    
player.penup()                        
player.speed(0)                          
player.goto(0, -100)                    

# Создаём убегающую черепашку (синяя) 
runner = turtle.Turtle()
runner.shape("turtle")                
runner.color("blue")                     
runner.penup()
runner.speed(0)
runner.goto(0, 100)                      

game_active = True                       

# Добавляем управление клавишами с клавиатуры 
def move_forward():
    if game_active:
        player.forward(20)               
        check_catch()                  

def move_backward():
    if game_active:
        player.backward(20)             
        check_catch()

def turn_left():
    if game_active:
        player.left(30)                 

def turn_right():
    if game_active:
        player.right(30)                 

# Добавляем управление мышкой 
def go_to_click(x, y):
    if game_active:
        player.setheading(player.towards(x, y))  
        player.goto(x, y)                        
        check_catch()

# Настраиваем перемещение убегающей черепахи 
def runner_jump():
    if not game_active:
        return
    # Генерируем случайные координаты в пределах игрового поля
    new_x = random.randint(-FIELD_SIZE, FIELD_SIZE)
    new_y = random.randint(-FIELD_SIZE, FIELD_SIZE)
    runner.goto(new_x, new_y)           
    check_catch()                       
    # Планируем следующий прыжок через JUMP_INTERVAL миллисекунд
    screen.ontimer(runner_jump, JUMP_INTERVAL)

# Проверяем, получилось ли поймать убегающую черепаху 
def check_catch():
    # Сравниваем расстояние между черепахами
    if player.distance(runner) < CATCH_DISTANCE and game_active:
        end_game()

# Планируем действия после окончания игры 
def end_game():
    global game_active
    game_active = False
    runner.hideturtle()  # Скрываем обеих черепашек
    player.hideturtle()
    # Создаём черепашку для вывода сообщения
    message = turtle.Turtle()
    message.hideturtle()
    message.penup()
    message.goto(0, 0)
    message.color("green")
    message.write("Поймано! Победа!", align="center", font=("Arial", 24, "bold"))

# Привязываем управление к клавишам и мышке 
screen.listen()
screen.onkeypress(move_forward, "Up")      
screen.onkeypress(move_backward, "Down")   
screen.onkeypress(turn_left, "Left")       
screen.onkeypress(turn_right, "Right")     
screen.onclick(go_to_click)                

runner_jump()

turtle.done()

Что дальше

Модуль turtle — отличный способ познакомиться с основами программирования на Python. После его освоения вы будете готовы перейти к более сложным инструментам и попробовать следующие:

  • Pygame — библиотека для создания 2D-игр на Python. Она позволяет работать с графикой, добавлять звуковые эффекты, а также обрабатывать действия игрока — нажатия клавиш, движения мыши и прочее. Например, вы можете написать на Pygame игру «Змейка».
  • Tkinter — стандартная библиотека Python для создания графического интерфейса. С её помощью можно создавать окна, кнопки, текстовые поля и другие элементы интерфейса. Например, на Tkinter легко реализовать калькулятор индекса массы тела.
  • Matplotlib — библиотека для построения графиков, диаграмм и визуализации данных. Например, вы можете создать столбчатую диаграмму с накоплением и отследить, как со временем изменялось соотношение Android- и iOS-устройств на рынке смартфонов.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!



Курс с трудоустройством: «Профессия Python-разработчик» Узнать о курсе
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована