Черепаха на бумаге и в Питоне
А теперь решим ту же задачу № 6 из ЕГЭ — на Черепаху — в Python.
Как известно, в прошлом году КУМИР выкинули из списка обязательного ПО для экзаменационных компьютеров. То есть задача на Черепаху есть, а КУМИРа нет. Значит, будем решать её при помощи Python, благо в его «коробке» есть библиотека turtle.
Напомню классическую задачу на Черепаху:
Черепахе был дан для исполнения следующий алгоритм: повтори 9 [вперед(5) вправо (60)] Постройте многоугольник в среде исполнителя «Черепаха» программы Кумир и посчитайте количество точек с целыми координатами, которые находятся внутри фигуры (точки на границе считать не нужно).
Библиотека turtle
Подключаем библиотеку обычным образом. Выберем вариант подключения через псевдоним, чтобы сразу было видно, какие элементы программы относятся к Черепахе, а какие — нет.
Черепаха удобна для одноразового вывода, даже, например, для создания диаграмм. Программировать с её помощью анимацию (например, обычными «фазами» через стирание — перерисовку) не получается.
Каркас программы с Черепахой:
import turtle as tr tr.done()
В отличие от Черепахи из бумажных задач начальное положение turtle — носом вправо. Здесь мы установили курсор в вид «черепашка».

Начало координат — точка (0,0) — в центре графического окна. Оси координат направлены как в математике.
Методы рисования
up() / down(): поднять хвост / опустить хвост — Черепаха рисует при опущенном хвосте
goto(x, y): перемещает Черепаху в точку (х, у), если хвост опущен — рисуется линия
setpos(x, y): перемещает Черепаху в точку (х, у) без отрисовки
dot(n): ставим точку размером n пикселов (при этом неважно, опущен хвост или поднят)
forward(n) / backward(n): движение вперёд / назад на n пикселов
right(n) / left(n): поворот направо / налево на n градусов
Методы настройки
exitonclick(): выход из программы при клике на окне
shape(«turtle»): вид курсора (turtle — черепашка)
tracer(n): длительность отрисовки, мс (0 — мгновенно)
screensize(x, y): размер графического окна
НеЕГЭшные методы
color(«red»): цвет контуров (параметр — название цвета)
width(n): толщина линий в пикселах
clearscreen(): очищает окно
pos() : возвращает позицию Черепахи в виде кортежа (x, y)
circle® : рисует круг радиусом r из точки, где находится Черепаха (текущая точка — это нижняя точка круга, если Черепаха направлена вправо)
fillcolor(«blue»): цвет заливки
begin_fill(): начать заливку, после этого замкнутая фигура будет закрашена выбранным в .fillcolor цветом
end_fill(): остановить заливку
Вывод текста
write(txt, move=False, align="left», font=(«Arial», 12, «normal»)
где
txt — выводимый текст
move — перемещать ли курсор после вывода текста
align = «left» / «center» / «right»
font — описание шрифта: кортеж из трёх элементов — гарнитура, размер в пикселах, начертание
Несколько Черепах
Основной объект библиотеки turtle — это Turtle. Мы можем создавать экземпляры этого объекта, чтобы использовать несколько Черепах с разными свойствами:
t1 = Turtle() t1.color('red') t1.width(3) t1.forward(100) t1.right(90) t2 = Turtle() t2.color('green') t2.width(1) t2.left(90) t2.forward(200)
Как видите, инструментарий вполне достаточный для наших задач. На одном из практических занятий мы даже выводим Черепахой столбиковую диаграмму по массиву данных:

Давайте решим всё ту же задачу № 6 на количество точек внутри фигуры.
Вначале переписываем заданную программу
повтори 9 [вперед(5) вправо (60)]
при помощи turtle
import turtle as tr # устанавливаем черепаху носом вверх, как в задаче tr.left(90) # переписываем программу из задачи for _ in range(9): tr.forward(5) tr.right(60) tr.done()
Однако мы обнаружим, что Черепаха нарисовала что-то совсем крошечное. Правильно, ведь параметр методов forward/backward задаётся в пикселах.

Добавим коэффициент укрупнения, на который будем умножать каждый отрезок (но, конечно, не угол 😄). Заодно отметим начало координат, чтобы понять, в какой части плоскости оказалась наша фигура.
import turtle as tr # устанавливаем черепаху носом вверх, как в задаче tr.left(90) # нарисуем точку в начале координат tr.dot(5) # коэффициент укрупнения k = 30 # переписываем программу из задачи for _ in range(9): tr.forward(5*k) tr.right(60) tr.done()

Черепаха нарисовала шестиугольник, да ещё и повторно прошлась по трём его сторонам. Действительно, шагов цикла-то 9!
Вся фигура оказалась справа от начала координат. Здесь мы и будем рисовать точки, которые потом посчитаем внутри фигуры. При этом используем тот же коэффициент укрупнения k, чтобы набросать точки с целочисленными координатами.
Заодно давайте сделаем точки синими, чтобы чётко видеть, где фигуры, а где точки.
import turtle as tr # устанавливаем черепаху носом вверх, как в задаче tr.left(90) # нарисуем точку в начале координат tr.dot(5) # коэффициент укрупнения k = 30 # переписываем программу из задачи for _ in range(9): tr.forward(5*k) tr.right(60) # нарисуем сетку из точек 0..10 по х и -10..10 по у tr.up() tr.color('blue') for x in range(10+1): for y in range(-10, 10+1): tr.setpos(x*k, y*k) tr.dot(3) tr.done()

Теперь подсчитываем точки, попавшие внутрь шестиугольника. Получаем 62 штуки, как при решении через КУМИР.
Если хочется, можно нарисовать не точки, а сетку — клеточки. Попробуйте! У вас есть все нужные инструменты 😉