Черепа-а-а-ашка!

Библиотека turtle — это модуль для языка Питон, позволяющей рисовать на экране рисунки. Представьте себе, что по экрану компьютера ползает маленькая черепашка (turtle). Вы можете управлять движением черепашки, отдавая ей различные команды вида "Проползти вперед на 10 пикселей", "Поверни направо на 10 градусов". После того, как вы отдадите ей команду "Начать рисовать", черепашка будет оставлять за собой след, пока не получит команду "Закончить рисовать". Управлять черепашкой можно при помощи инструкций Питона. Вот так, например, выглядит программа, рисующая квадрат:

import turtle           # Подключаем модуль turtle
T = turtle.Turtle()     # T — это наша черепашка. Можно создавать много черепашек
T.pendown()             # Опускаем перо (начало рисования)
T.forward(50)           # Проползти 50 пикселей вперед
T.left(90)              # Поворот влево на 90 градусов
T.forward(50)           # Рисуем вторую сторону квадрата
T.left(90)              # Поворот влево на 90 градусов
T.forward(50)           # Рисуем третью сторону квадрата
T.left(90)              # Поворот влево на 90 градусов
T.forward(50)           # Рисуем четвертую сторону квадрата
T.penup()               # Поднять перо (закончить рисовать)
T.forward(100)          # Отвести черепашку от рисунка в сторону
T.hideturtle()          # Спрятать черепашку
turtle.mainloop()       # Задержать окно на экране

Документация

Находится на странице https://docs.python.org/3/library/turtle.html.

Основные команды для управления черепашкой

Самое основное

T.forward(distance)
Проползти вперёд на distance пикселей;
T.right(angle)
Повернуться направо на angle градусов;
T.left(angle)
Повернуться налево на angle градусов;
T.pendown()
Начать рисовать;
T.penup()
Закончить рисовать;
T.goto(x, y)
Переместить черепашку в точку с координатами (x,y);

Ползаем

T.backward(distance)
Проползти назад на distance пикселей;
T.setx(x)
Установить x координату черепашки;
T.sety(y)
Установить y координату черепашки;
T.setheading(to_angle)
Повернуть черепашку под углом to_angle к вертикали (0 — наверх, 90 — направо);
T.home()
Вернуть черепашку домой — в точку, с координатами (0,0);
T.circle(radius)
Нарисовать окружность радиуса |r|, центр которой находится слева от черепашки, если r>0 и справа, если r<1;
T.dot(size, color)
Нарисовать точку диаметра size цвета color. Параметр color необязателен;
T.undo()
Откатить предыдущее действие черепашки;

Рисуем

T.pensize(width)
Установить диаметр пера в width;
T.pencolor(colorstring)
Установить цвет линии, которая рисует черепашка (например, 'brown' или '#32c18f');
T.fillcolor(colorstring)
Установить цвет заполнения;
T.begin_fill()
Начать следить за черепашкой для заполнения области;
T.end_fill()
Заполнить цветом fillcolor область, пройденную черепашкой начиная с begin_fill();
T.showturtle()
Показать черепашку;
T.hideturtle()
Спрятать черепашку;
T.write(text)
Вывести текст text;

Ускоряем рисование

T.speed(speed)
Установить скорость черепашки. speed должно быть от 1 (медленно) до 10 (быстро), или 0 (мгновенно);
T.getscreen().tracer(n)
Отрисовывать лишь каждый n-й кадр. Почти в n раз ускоряет отрисовку.

Узнать про черепашку

T.position()
Получить текущие координаты черепашки;
T.towards(x, y)
Получить угол между текущим направление черепашки и прямой от черепашки к точке (x,y);
T.xcor()
Получить x координату черепашки;
T.ycor()
Получить y координату черепашки;
T.heading()
Получить текущий угол к вертикали;
T.distance(x, y)
Получить расстояние до точки (x,y);
T.isdown()
Узнать, рисует ли сейчас черепашка;
T.isvisible()
Узнать, видима ли сейчас черепашка;

Интерактив

turtle.onkey(function, key)
Выполнить функцию function (принимающей два аргумента, x и y — координаты черепашки) после нажатия кнопки key (например, 'a', 'Up', 'space');
turtle.listen()
Начать следить на нажатиями клавиш и кликами мыши;
turtle.ontimer(function, time)
Выполнить функцию function через time миллисекунд;
turtle.textinput(title, prompt)
Вывести окно с заголовком title и текстом prompt, вернуть введённое значение;

Контроль над окном

turtle.setworldcoordinates(llx, lly, urx, ury)
Сделать окно от (llx, lly) до (urx, ury);
T.getscreen().window_width()
Ширина окна
T.getscreen().window_height()
Высота окна
turtle.turtles()
Список всех черепашек

A: Многоугольники

На вход даётся натуральное число $n>1$. Нарисуйте все $k$-угольники для $k$ от 2 до $n$ так, чтобы у них была общая сторона.

Картинки с примерами
9

B: Кривая Коха

Кривая Коха — фрактальная кривая, описанная в 1904 году шведским математиком Хельге фон Кохом. Кривая Коха является типичным геометрическим фракталом. Процесс её построения выглядит следующим образом: берём единичный отрезок, разделяем на три равные части и заменяем средний интервал равносторонним треугольником без этого сегмента. В результате образуется ломаная, состоящая из четырёх звеньев длины 1/3. На следующем шаге повторяем операцию для каждого из четырёх получившихся звеньев и т. д… Предельная кривая и есть кривая Коха.

Строить фрактальные кривые очень удобно при помощи рекурсивных процедур, получающих на вход глубину рекурсии и линейный размер кривой (или какой-то её конкретной части).

На вход даётся неотрицательное число $n$. Постройте кривую «степени» $n$.

Картинки с примерами
0

1

2

3

7

C: Снежинка Коха

Три копии кривой Коха, построенные (остриями наружу) на сторонах правильного треугольника, образуют замкнутую кривую бесконечной длины, называемую снежинкой Коха.

На вход даётся неотрицательное число $n$. Постройте кривую «степени» $n$.

Картинки с примерами
0

1

5

D: Треугольник Серпинского

Треугольник Серпинского — фрактал, один из двумерных аналогов множества Кантора, предложенный польским математиком Вацлавом Серпинским в 1915 году. Также известен как «решётка» или «салфетка» Серпинского.

На вход даётся неотрицательное число $n$. Постройте границу салфетки Серпинского «степени» $n$.

Картинки с примерами
0

1

2

5

9


E: Кривая Минковского

Кривая Минковского — классический геометрический фрактал, предложенный Минковским. Инициатором является отрезок, а генератором является ломаная из восьми звеньев (два равных звена продолжают друг друга).

На вход даётся неотрицательное число $n$. Постройте кривую «степени» $n$.

Картинки с примерами
0

1

2

3

F: Сторона ледяного фрактала

В ледяном фрактале всё начинается с отрезка. На каждом шаге в центре каждого отрезка «отрастают» два «уса» под углом 60 градусов длиной одна четверть от исходного отрезка.

На вход даётся неотрицательное число $n$. Постройте кривую «степени» $n$.

Картинки с примерами
0

1

2

3

4

G: Ледяной треугольный фрактал

Из 6 кусков соберите ледяной треугольный фрактал.

На вход даётся неотрицательное число $n$. Постройте кривую «степени» $n$.

Картинки с примерами
0

1

2

5

H: Кривая дракона

Считается, что такое название фрактал получил за сходство с традиционными китайскими драконами. По крайней мере, так показалось ученым, которые впервые его исследовали. Каждая ломаная-дракон является лишь приближением к дракону-фракталу и состоит из отрезков. Ломаная с номером n будет состоять из $2^n$ отрезков.

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

На вход даётся неотрицательное число $n$. Постройте кривую «степени» $n$.
Ориентация кривой важна, первый поворот — налево.

Картинки с примерами
0

1

2

3

4

5

10

18

I: Оголённое Пифагорово дерево

В этой задаче мы будем строить то, что называют «обнаженное обдуваемое ветром дерево Пифагора». Классическое дерево Пифагора состоит из множества квадратов (см. раз, два).

На вход даётся неотрицательное число $n$, и два угла $\alpha$ и $\beta$. Необходимо построить дерево «степени» $n$. Для этого нужно построить отрезок, клонировать черепашку командой T.clone(). Первую черепашку нужно повернуть на угол $\alpha$ налево, а вторую — на угол $\beta$ направо. После чего приказать каждой черепашке построить по такому же дереву Пифагору на единицу меньшей степени.

Длина каждого следующего отрезка в глубь должна быть в $\sqrt2$ раза меньше предыдущего.

PS. Вероятно, саму черепашку, которая будет рисовать дерево, нужно передавать внутрь рекурсивной функции.

Картинки с примерами
0
45 45

1
45 45

2
45 45

3
45 45

4
60 20

9
60 20

12
60 20

Ещё нетривиальные примеры черепашки

Рисуем простую фигуру

Знак радиоактивности

Оптическая иллюзия

Гравитация — комета-черепашка вокруг солнца

Управляем космическим кораблём

Пример от разработчкиков turtle