Рисуем черепашкой по шагам: от квадрата до радуги и шахматной доски

Практикумобновлено 07.10.202611 мин чтенияесть тренажёр

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

Загружаем…

Как устроены задания для черепашки

Каждое задание для черепашки — это картинка, которую нужно нарисовать кодом, плюс подсказка о нужных командах. Первые 3 рисунка решаются короткими программами, следующие 3 требуют цикла for, а последние 4 — цвета, окружностей и собственных функций.

Черепашка — это курсор-исполнитель на холсте. Она стоит в центре, смотрит вправо и тянет за собой перо. Когда перо опущено, за ней остаётся линия; когда поднято, черепашка просто перемещается. Всё, что от вас требуется, — объяснить ей маршрут. Такой способ рисования придумали для языка Logo: Сеймур Пейперт описывал, как ребёнок «влезает в шкуру» черепашки и проверяет программу собственным телом, шагая по комнате[1]. Этот приём работает и сегодня: если рисунок не получается, встаньте и пройдите маршрут ногами. Сам Пейперт подчёркивал, что ценность не в готовой картинке, а в привычке разбирать собственные ошибки.

Редактор находится над статьёй. В нём уже лежит заготовка второго задания — домик. Нажмите «▶ Запустить» или Ctrl+Enter, и черепашка нарисует его на белом холсте под редактором. Кнопка «Сбросить» вернёт исходный код, а черновик сохраняется в браузере, так что можно закрыть вкладку и продолжить позже. Если в программе ошибка, справа появится сообщение и подсказка на русском языке.

Шпаргалка: 10 команд модуля turtle

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

КомандаЧто делаетГде понадобится
t.forward(100)шаг вперёд на 100 точекво всех рисунках
t.back(50)шаг назад, не поворачиваясьлучи снежинки
t.left(90), t.right(90)поворот на месте на заданный угол в градусахвсе фигуры
t.penup(), t.pendown()поднять и опустить перорадуга, улица
t.goto(x, y)переход в точку с координатамирадуга, доска
t.setheading(90)повернуть носом в нужную сторону: 0 — вправо, 90 — вверхрадуга
t.color("red")цвет линиизвезда, радуга
t.circle(50)окружность радиусом 50; второй аргумент — часть дугицветок, радуга
t.begin_fill(), t.end_fill()залить фигуру между этими командамишахматная доска
t.speed(0)скорость: 1 — медленно, 10 — быстро, 0 — без анимациидлинные рисунки

Центр холста имеет координаты (0, 0), ось x идёт вправо, ось y — вверх. Углы считаются в градусах. Главное правило для многоугольников: пока черепашка обходит замкнутую фигуру, сумма всех её поворотов равна 360 градусам. Для квадрата это 4 поворота по 90, для треугольника — 3 поворота по 120, а не по 60, как часто пишут новички. Подробно о модуле и его истории рассказано в статье о черепашьей графике в Python.

Задания 1–3: первые рисунки

Первые 3 задания учат главному — представлять, куда смотрит черепашка после каждого поворота. Циклы здесь можно не использовать: длинная программа из одинаковых строк потом станет хорошим поводом познакомиться с for.

Задание 1. Квадрат со стороной 100

Нарисуйте квадрат: четыре шага вперёд по 100 точек и четыре поворота налево на 90 градусов. Проверьте, что черепашка вернулась в исходную точку и снова смотрит вправо.

import turtle
t = turtle.Turtle()
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)

Усложнение: сделайте прямоугольник 160 на 80. Для этого стороны должны чередоваться, а углы остаются прежними.

Задание 2. Домик с крышей

Заготовка домика уже в редакторе. Стены — квадрат, крыша — равносторонний треугольник со стороной 100. Сложность в том, чтобы после стен поднять черепашку в левый верхний угол и развернуть носом вверх-вправо, на 60 градусов от горизонтали. Крыша не получится, если повернуть на 30 градусов не в ту сторону. Добавьте окно — маленький квадрат внутри стен. Подсказка: перейдите к нему с поднятым пером через goto.

Задание 3. Лестница из пяти ступенек

Каждая ступенька — это подъём вверх и шаг вправо. Повороты чередуются: налево, потом направо. Если повторять одно и то же 5 раз, получится лестница.

import turtle
t = turtle.Turtle()
for i in range(5):
    t.left(90)
    t.forward(30)
    t.right(90)
    t.forward(30)

Попробуйте спустить лестницу вниз, поменяв направление первого поворота. А если увеличивать длину шага на каждой ступеньке, получится лестница, которая становится всё круче.

Задания 4–6: циклы и углы

В заданиях 4–6 без цикла for уже не обойтись: звезда, снежинка и спираль состоят из десятков одинаковых движений. Если нужно освежить запись цикла, загляните в урок про цикл for и range.

Задание 4. Пятиконечная звезда

Звезда рисуется одной линией, без отрыва пера: пять лучей и пять поворотов на 144 градуса. Откуда это число? Обходя звезду, черепашка поворачивается дважды вокруг себя, то есть на 720 градусов, а 720 делить на 5 будет 144. Угол 72 градуса здесь не подходит: с ним выйдет пятиугольник, а не звезда.

import turtle
t = turtle.Turtle()
t.color("orange")
for i in range(5):
    t.forward(150)
    t.right(144)

Эксперимент: замените 5 и 144 на 7 и 1080 / 7. Получится семиконечная звезда, хотя угол уже не целый. Python спокойно принимает дробные градусы.

Задание 5. Снежинка из восьми лучей

Снежинка — это 8 лучей, расходящихся из центра. Черепашка проходит луч, возвращается командой back и поворачивается на 45 градусов. На конце каждого луча можно добавить «рогатку» из двух коротких отрезков.

import turtle
t = turtle.Turtle()
t.color("blue")
for i in range(8):
    t.forward(60)
    t.left(30)
    t.forward(20)
    t.back(20)
    t.right(60)
    t.forward(20)
    t.back(20)
    t.left(30)
    t.back(60)
    t.right(45)

Важно, что после каждого луча черепашка возвращается ровно туда, откуда начала, и смотрит в прежнюю сторону. Только тогда следующий поворот на 45 градусов даст симметричный рисунок.

Задание 6. Квадратная спираль

Спираль получается, если на каждом шаге цикла удлинять сторону. Переменная цикла здесь работает как линейка: t.forward(i * 5) делает каждую следующую сторону на 5 точек длиннее. Поменяйте поворот с 90 на 91 градус — спираль закрутится, как воронка. Поставьте t.speed(0), чтобы не ждать.

Задания 7–10: цвет, круги и функции

Последние 4 задания — проекты на 15–30 минут каждый. В них появляются списки цветов, дуги окружностей, заливка и собственные функции, поэтому решать их лучше после первых шести.

Задание 7. Радуга из полукругов

Радуга — это 6 полукругов разного цвета с общим центром. Команда circle(r, 180) рисует половину окружности, а центр всегда находится слева от черепашки на расстоянии радиуса.

import turtle
t = turtle.Turtle()
t.pensize(10)
colors = ["red", "orange", "yellow", "green", "blue", "purple"]
r = 150
for c in colors:
    t.penup()
    t.goto(r, 0)
    t.setheading(90)
    t.pendown()
    t.color(c)
    t.circle(r, 180)
    r = r - 10

Перед каждой дугой черепашка поднимает перо, переходит вправо на расстояние радиуса и разворачивается носом вверх. Если забыть setheading, дуги поедут в разные стороны.

Задание 8. Цветок из двенадцати кругов

Нарисуйте 12 окружностей радиусом 50, поворачиваясь после каждой на 30 градусов: 12 умножить на 30 как раз даёт полный оборот. Чередуйте два цвета через проверку чётности номера круга. Затем добавьте стебель: поднимите перо, опуститесь вниз и проведите зелёную линию.

Задание 9. Улица из домиков

Если один домик нужен 3 раза, его код стоит упаковать в функцию с параметрами — координатами левого нижнего угла.

import turtle
t = turtle.Turtle()
t.speed(0)

def house(x, y):
    t.penup()
    t.goto(x, y)
    t.setheading(0)
    t.pendown()
    for i in range(4):
        t.forward(80)
        t.left(90)
    t.left(90)
    t.forward(80)
    t.right(30)
    for i in range(3):
        t.forward(80)
        t.right(120)

for x in range(-200, 200, 130):
    house(x, -50)

Добавьте третий параметр — цвет, и сделайте улицу разноцветной. Подробнее о параметрах читайте в уроке о функциях в Python.

Задание 10. Шахматная доска

Доска 4 на 4 строится двумя вложенными циклами: внешний перебирает ряды, внутренний — клетки в ряду. Клетку закрашивают, только если сумма номеров ряда и столбца чётная.

import turtle
t = turtle.Turtle()
t.speed(0)
size = 40
for row in range(4):
    for col in range(4):
        t.penup()
        t.goto(col * size, row * size)
        t.setheading(0)
        t.pendown()
        if (row + col) % 2 == 0:
            t.begin_fill()
        for k in range(4):
            t.forward(size)
            t.left(90)
        if (row + col) % 2 == 0:
            t.end_fill()

Когда доска 4 на 4 заработает, замените 4 на 8 и уменьшите size до 30, чтобы она поместилась на холсте.

Как найти ошибку, если рисунок не совпал

Если рисунок получился кривым, ошибка почти всегда в одном из 3 мест: неверный угол поворота, лишний или пропущенный поворот в конце цикла, перо не поднято при переходе. Ищите её по шагам, а не переписывайте всё заново.

  1. Замедлите исполнителя. Поставьте t.speed(1) и следите, на каком шаге линия пошла не туда.
  2. Сократите цикл. Вместо 8 повторов оставьте 1 и проверьте, что один луч или одна сторона рисуются правильно.
  3. Проверьте сумму углов. Замкнутая фигура требует 360 градусов поворота в сумме, звезда — 720.
  4. Пройдите маршрут ногами. Совет Пейперта по-прежнему лучший: шаг вперёд, поворот, снова шаг.

Отдельно про ошибки Python: если программа вообще не запускается, прочитайте сообщение справа. Чаще всего это опечатка в имени команды, например t.foward, или забытые скобки у t.penup. Без скобок команда не выполнится, а ошибки при этом не будет — поэтому такой промах трудно заметить.

Задания для черепашки на уроках информатики

Исполнитель Черепашка входит в школьный курс: по федеральной образовательной программе основного общего образования в 8 классе изучают исполнителей Робот, Черепашка и Чертёжник[2]. Значит, эти упражнения пригодятся не только дома. Домашние задания для черепашки хорошо дополняют уроки, но не заменяют их: школьная программа требует ещё ветвлений, строк и массивов.

В школе исполнитель может выглядеть иначе: например, в среде КуМир его команды записаны на русском, а цикл называется «нц». Идея та же: вперёд, поворот, повторить. Поэтому ученик, который сам рисовал снежинки на Python, легко разберётся и в школьной записи. Связь между разными исполнителями показана в статье про исполнителей Робот и Черепашка. Стиль кода в заданиях соответствует руководству PEP 8: отступ в 4 пробела и понятные имена переменных[3].

Когда черепашья графика не подходит

Черепашья графика не подходит для любых задач подряд: это учебный инструмент, у которого есть пределы. В этих 4 случаях лучше выбрать другое занятие.

  • Ребёнку 5–7 лет. Он ещё плохо печатает, поэтому сначала стоит попробовать блочные среды и игры без компьютера.
  • Нужна игра с управлением в реальном времени. Холст на странице рассчитан на рисунки, а игра с 10 движущимися объектами проще делается в Scratch.
  • Рисунок из 1000 и больше отрезков. Анимация растянется, а программа может упереться в ограничение времени работы — защиту от бесконечного цикла.
  • Цель — подготовка к заданию 16 ОГЭ. Там нужны ввод, числа и условия, а не графика, поэтому лучше решать текстовые задачи.

«Черепашья графика — это игрушка, настоящего программирования в ней нет». Это миф: в заданиях выше используются переменные, циклы, условия, списки и функции — те же конструкции, что и в любой программе на Python.

«Рисование кодом автоматически развивает пространственное мышление». Такая гарантия не подтверждается: метаанализы находят положительный, но умеренный эффект, и он зависит от того, как построены занятия, а не от самого факта рисования[4].

Чего делать нельзя

Нельзя превращать рисование в переписывание чужого кода: пользы от этого почти нет. Вот 6 правил, которые сберегут время и интерес.

  • Нельзя называть свой файл turtle.py в Python на компьютере: программа импортирует сама себя, и команды «пропадут».
  • Не стоит сразу открывать готовое решение — сначала нарисуйте маршрут на бумаге.
  • Не следует подбирать угол наугад десятью запусками: посчитайте его через 360 градусов.
  • Не стоит перескакивать к заданию 10, пока не получились звезда и снежинка.
  • Нельзя забывать скобки у команд без аргументов: t.penup без скобок ничего не сделает.
  • Не допускается сидеть над одним рисунком часами: если не выходит 20 минут, сделайте перерыв или откройте подсказку.

Больше идей для экспериментов с цветом и случайностью — в подборке генеративных узоров кодом, а базовые фигуры разобраны в статье о многоугольниках черепашкой.

Источники

[1] Papert S. Mindstorms: Children, Computers, and Powerful Ideas. New York: Basic Books, 1980.

[2] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».

[3] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.

[4] Scherer R., Siddiq F., Sánchez Viveros B. The cognitive benefits of learning computer programming: A meta-analysis of transfer effects // Journal of Educational Psychology. 2019. Vol. 111, № 5. P. 764–792.

Вопросы и ответы

С какого возраста подходят задания для черепашки?

Обычно с 9–10 лет, когда ребёнок уверенно читает и печатает короткие команды. Первые три рисунка доступны и раньше, если взрослый помогает набирать код.

Нужно ли что-то устанавливать?

Нет, редактор с холстом работает прямо на странице. На компьютере модуль turtle входит в стандартный Python, и программы запускаются в IDLE без изменений.

Почему треугольник получается незамкнутым?

Скорее всего, поворот стоит 60 градусов. Черепашка поворачивается на внешний угол, поэтому для равностороннего треугольника нужно 120.

Как сделать рисунок быстрее?

Добавьте в начало t.speed(0). Анимация отключится, и сложный узор появится почти сразу.

Как закрасить фигуру?

Перед обходом фигуры вызовите begin_fill(), после — end_fill(). Цвет заливки задаётся командой fillcolor или вторым аргументом color.

Что делать после всех десяти рисунков?

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