Черепаха в Python: команды turtle и примеры

опубликовано
читать
≈ 6 мин
автор
среда и версия
Python 3.14.2 в браузере (Pyodide 314.0.3) — та же среда, что в песочнице: turtle в ней рисует картинку под выводом. Ошибки Python на компьютере сняты в CPython 3.14.7 и в Ubuntu 24.04 с Python 3.12.3
содержание решать задачи Python для начинающих

Черепаха — модуль turtle из стандартной библиотеки Python. Ты командуешь «вперёд на 100», «налево на 90», а черепашка ползёт по экрану и оставляет за собой линию: так рисуют фигуры и узоры и решают задание 6 ЕГЭ. Каждый пример ниже запускается прямо здесь — нажми «запустить», и рисунок появится под кодом. Дальше можно рисовать в песочнице Python: черепаха там та же.

Python / 01

forward ведёт туда, куда смотрит черепаха

forward ведёт туда, куда смотрит черепахаЧерепаха стартует в точке (0, 0) в центре окна и смотрит вправо, это направление 0 градусов. Шаг 1: forward(100) ведёт её в точку (100, 0). Шаг 2: left(90) поворачивает против часовой стрелки, направление становится 90 градусов, вверх. Шаг 3: forward(50) поднимает её в точку (100, 50). Справа — направления setheading: 0 градусов вправо, 90 вверх, 180 влево, 270 вниз; left поворачивает против часовой стрелки, right — по часовой.01 / путь черепахи02 / направленияxy(0, 0) — старт, 0°1 forward(100)(100, 0)2 left(90): 0° → 90°3 forward(50)(100, 50)0°90°180°270°left — против часовой стрелкиright — по часовой
Черепаха начинает в центре окна, в точке (0, 0), и смотрит вправо. forward ведёт её туда, куда она смотрит, а left поворачивает против часовой стрелки: после left(90) она смотрит вверх, и forward(50) поднимает её в (100, 50).

Первый рисунок: квадрат

import turtle

t = turtle.Turtle()
for i in range(4):
    t.forward(100)
    t.left(90)

turtle.done()

turtle.Turtle() создаёт черепаху, forward(100) проводит линию в 100 шагов, left(90) поворачивает её на 90 градусов против часовой стрелки. Четыре раза «вперёд и налево» — квадрат замкнулся, и черепаха снова смотрит вправо.

Последняя строка, turtle.done(), нужна на компьютере: если запустить программу из терминала, без неё окно с рисунком закроется сразу после последней команды. Здесь рисунок остаётся под кодом и так.

Основные команды

командачто делает
forward(n)вперёд на n шагов
backward(n)назад на n шагов, не поворачиваясь
left(a)повернуть налево, против часовой стрелки, на a градусов
right(a)повернуть направо, по часовой стрелке
penup()поднять перо: дальше черепаха идёт без следа
pendown()опустить перо
goto(x, y)перейти в точку (x, y)
setheading(a)повернуться в направление a: 0 — вправо, 90 — вверх
home()вернуться в (0, 0) и смотреть вправо
circle(r)круг радиуса r
dot(size)точка диаметром size
color(c)цвет линии и заливки
pensize(w)толщина линии
speed(s)скорость: 1 — медленно, 10 — быстро, 0 — без анимации
hideturtle()спрятать черепаху
write(text)написать текст там, где стоит черепаха

У многих команд есть короткие формы, они делают то же самое: fd — это forward, back и bk — backward, lt и rt — left и right, up и pu — penup, down и pd — pendown, setpos — goto, seth — setheading, width — pensize, ht — hideturtle. Расстояния считаются в шагах, один шаг — один пиксель окна; повороты — в градусах.

Назад и направо

import turtle

t = turtle.Turtle()
t.forward(100)
t.backward(150)
t.right(90)
t.forward(60)
print(t.position())
(-50.00,-60.00)

backward(150) пятится, не поворачиваясь: черепаха проходит через старт и останавливается в точке (−50, 0). right(90) разворачивает её вниз, и forward(60) уводит в (−50, −60). position() отвечает, где черепаха стоит, а heading() — куда она смотрит.

Перо: penup и pendown

import turtle

t = turtle.Turtle()
for i in range(6):
    t.forward(20)
    t.penup()
    t.forward(10)
    t.pendown()

penup() поднимает перо: черепаха идёт, но не рисует. Так получается пунктир, и так переходят к новой фигуре, не протянув к ней линию. pendown() опускает перо обратно.

goto: прыжок в точку

import turtle

t = turtle.Turtle()
t.penup()
t.goto(-100, 0)
t.pendown()
t.goto(0, 100)
t.goto(100, 0)
t.goto(-100, 0)
print(t.heading())
0.0

goto(x, y) ведёт черепаху прямо в точку: центр окна — (0, 0), x растёт вправо, y — вверх. Направление при этом не меняется: черепаха объехала треугольник боком, и heading() по-прежнему 0.0. Перо поднято в начале, поэтому от центра к первой вершине линии нет.

Цвет, толщина и заливка

import turtle

t = turtle.Turtle()
t.pensize(3)
t.color("black", "gold")
t.begin_fill()
for i in range(5):
    t.forward(150)
    t.right(144)
t.end_fill()

color("black", "gold") задаёт два цвета: линии и заливки. Всё, что черепаха обойдёт между begin_fill() и end_fill(), закрашивается. Середина звезды останется пустой: так закрашивает фигуру с самопересечениями и Python на компьютере. Цвет задают именем — "red", "light blue" — или кодом, например "#ff8800".

Круги, дуги и многоугольники

import turtle

t = turtle.Turtle()
t.circle(50)
t.circle(80, steps=6)
t.circle(110, 180)

circle(r) рисует круг, центр которого на r шагов левее черепахи, поэтому круг лежит над стартом. steps=6 превращает круг в шестиугольник, а второй аргумент — в дугу: 180 — половина круга. После полукруга черепаха смотрит влево.

Узор из цикла: спираль

import turtle

t = turtle.Turtle()
t.speed(0)
for i in range(60):
    t.forward(i * 4)
    t.left(91)

Каждый виток на 4 шага длиннее предыдущего, а поворот на 91 градус вместо 90 закручивает квадраты в спираль. speed(0) убирает анимацию, и рисунок появляется сразу. Без него черепаха проводит линии по очереди — и на компьютере, и здесь.

Задание 6 ЕГЭ: точки внутри фигуры

В задании 6 ЕГЭ по информатике исполнитель Черепаха рисует фигуру по программе, а спрашивают, сколько точек с целыми координатами окажется внутри. Решают так: повторяют программу на Python в масштабе, ставят точку в каждый узел сетки и считают точки внутри фигуры.

Пусть программа Черепахи такая: Повтори 2 [Вперёд 9 Направо 90 Вперёд 6 Направо 90].

from turtle import *

tracer(0)
k = 20
left(90)
for i in range(2):
    forward(9 * k)
    right(90)
    forward(6 * k)
    right(90)
up()
for x in range(-2, 9):
    for y in range(-2, 12):
        goto(x * k, y * k)
        dot(4)
update()
  • left(90) — потому что Черепаха в ЕГЭ смотрит вверх, по оси y, а черепаха Python — вправо.
  • k = 20 — масштаб: одна клетка задачи становится 20 шагами, иначе точки слипнутся.
  • tracer(0) выключает анимацию, а update() показывает готовый рисунок: иначе сотни точек на компьютере рисовались бы долго.
  • up() — то же, что penup(): между точками нет линий.

Получился прямоугольник 6 на 9 клеток. Внутри него — точки с x от 1 до 5 и y от 1 до 8: 5 × 8 = 40. Точки на сторонах внутрь не входят; если по условию их нужно учесть, ответ — 7 × 10 = 70. У фигур сложнее прямоугольника формулы нет: точки считают по рисунку или программой — как именно, разобрано в статье «Задание 6 ЕГЭ на Python».

Что здесь не работает

Здесь рисунок — картинка под выводом, а не окно. Поэтому onclick, onkey и ontimer не срабатывают: ловить клавиши и мышь негде, и под рисунком появится пояснение. Игры, которые ждут нажатий, запускай в Python на компьютере. Долгие рисунки удобнее запускать в песочнице: там у программы больше времени, чем у примера на странице.

Частые ошибки

turtle.turtle() вместо turtle.Turtle(). Класс черепахи пишется с большой буквы, и Python сам подсказывает:

AttributeError: module 'turtle' has no attribute 'turtle'. Did you mean: 'Turtle'?

Файл назван turtle.py. Python находит твой файл раньше модуля и импортирует его самого, поэтому turtle.Turtle() падает с AttributeError. С версии 3.13 сообщение прямо советует переименовать файл: consider renaming '…/turtle.py' since it has the same name as the standard library module named 'turtle'. Назови его иначе, например drawing.py.

Опечатка в цвете. t.color("oragne") падает с TurtleGraphicsError: bad color string: oragne: черепаха знает имена цветов и коды вида "#ff8800", а угадывать не станет.

No module named 'tkinter' в Linux. Окно черепахи рисует библиотека Tk. В Ubuntu и Debian она ставится отдельным пакетом, и без него import turtle падает:

ModuleNotFoundError: No module named 'tkinter'

Поставь пакет командой sudo apt install python3-tk.

Окно закрылось сразу. В конце программы нет turtle.done(). Если окно нужно закрывать щелчком мыши, вместо него вызови turtle.exitonclick().

Источники