Движение вперёд и назад
Первое, что должна уметь черепашка — двигаться. В этом разделе вы напишете свою первую программу, которая по-настоящему рисует.
Зачем это нужно
Всё, что вы нарисуете дальше — квадраты, шестиугольники, мандалы, даже персонажей в играх — строится из одной и той же пары действий: «проехать немного» и «повернуть на какой-то угол». Освоив эти четыре команды, вы получите строительные блоки для всей главы.
Простая модель
Представьте черепашку как перо на листе бумаги. У пера есть две вещи: позиция (где оно сейчас находится) и курс — направление, в которое оно «смотрит». Когда черепашка едет вперёд, она просто перемещается по прямой в сторону своего курса. Когда она поворачивает, меняется курс, а позиция остаётся прежней — как будто вы стоите на месте и просто поворачиваетесь.
Синтаксис
У объекта черепашки есть четыре базовые команды движения:
forward(расстояние)— проехать вперёд на указанное число пикселей (короткая форма —fd)backward(расстояние)— проехать назад, не поворачиваясь (короткие формы —bk,back)right(угол)— повернуть по часовой стрелке на угол в градусах (короткая форма —rt)left(угол)— повернуть против часовой стрелки на угол в градусах (короткая форма —lt)
Первый рабочий пример
Нарисуем букву «Г»: проедем вперёд, повернём и проедем ещё раз.
import turtle
# создаём окно и черепашку
screen = turtle.Screen()
artist = turtle.Turtle()
# едем вперёд на 120 пикселей
artist.forward(120)
# поворачиваем на 90 градусов против часовой стрелки
artist.left(90)
# едем вперёд ещё раз — получаем букву «Г»
artist.forward(80)
screen.exitonclick() # окно закроется по клику мыши
Разбор по шагам
turtle.Screen()открывает окно для рисования.turtle.Turtle()создаёт саму черепашку — в начале координат, курс направлен вправо (на восток).artist.forward(120)— черепашка проезжает 120 пикселей в направлении курса, оставляя линию.artist.left(90)— курс поворачивается на 90° против часовой стрелки (теперь черепашка «смотрит» вверх).- Второй вызов
forward()едет уже в новом направлении — отсюда и получается уголок буквы «Г». screen.exitonclick()держит окно открытым, пока вы не кликнете по нему — без этой строки окно может закрыться мгновенно.
forward() и right()/left() могут быть отрицательными. forward(-50) и backward(50) делают одно и то же.Эксперимент 1
Измените расстояние 120 на 250 и угол 90 на 45. Перед запуском попробуйте предсказать: в какую сторону теперь «смотрит» черепашка после поворота?
Эксперимент 2
Добавьте третью пару команд left(90) и
forward(120) в конец программы. Какая фигура получится?
Типичная ошибка
right()/left() с движением — кажется, что черепашка должна сместиться в сторону. На самом деле эти команды только поворачивают курс и не двигают черепашку ни на пиксель.Диагностика: если после поворота фигура выглядит «сплющенной» или линии
накладываются друг на друга — скорее всего, вы забыли вызвать forward()
после поворота, либо перепутали местами поворот и движение.
Исправление: перечитайте программу построчно и для каждой команды спросите себя: «это движение или поворот?» — держите эти два действия отдельно друг от друга.
Современный вариант
В старом коде черепашку часто рисуют без явного объекта — модуль
turtle автоматически создаёт «черепашку по умолчанию», и её можно
двигать напрямую через функции модуля.
import turtle
# без явного объекта —
# используется скрытая
# черепашка по умолчанию
turtle.forward(120)
turtle.left(90)
turtle.forward(80)
turtle.done()
import turtle
# явный объект — понятно,
# какая черепашка рисует,
# легко добавить вторую
artist = turtle.Turtle()
artist.forward(120)
artist.left(90)
artist.forward(80)
turtle.done()
turtle.Turtle(). Он ничего не усложняет, зато сразу готовит вас к главе 14 (объекты) и легко масштабируется — если позже понадобится нарисовать гонку из нескольких черепашек (см. мини-проект в главе 12), у каждой будет своё имя и своё состояние. Модульные функции (turtle.forward() без объекта) всё ещё встречаются в старом коде и учебниках — знать их полезно, но начинайте привычку сразу с объекта.Задание
Используя только forward, backward, left и right, нарисуйте букву «Т» одной непрерывной линией пера.
Нарисуйте лестницу, состоящую из трёх одинаковых «ступенек» (вперёд-поворот-вперёд-поворот). Попробуйте обойтись без повторения одинакового блока кода вручную — подсказка: этому вы научитесь в главе 10, а пока просто повторите блок трижды подряд.
Что запомнить
forward()/backward()двигают черепашку по прямой;left()/right()только поворачивают курс.- Позиция и курс — это два независимых свойства черепашки.
- Современный стиль — создавать явный объект
turtle.Turtle(), а не полагаться на скрытую черепашку по умолчанию. screen.exitonclick()илиturtle.done()нужны, чтобы окно не закрылось мгновенно.