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