Класс Turtle. Создание нескольких черепах в модуле turtle языка Python

Словарь урока

из модуля turtle:
  • teleport ‒ телепорт
  • write ‒ написать
  • forward ‒ вперед
  • shape ‒ форма
  • color ‒ цвет
  • circle ‒ круг, окружность
  • goto ‒ идти к
  • shapesize ‒ размер (size) формы (shape)
  • Turtle ‒ черепаха
  • speed ‒ скорость
  • hideturtle ‒ скрыть (hide) черепаху (turtle)
  • showturtle ‒ показать (show) черепаху (turtle)
  • isvisible ‒ является (is) видимой (visible)
из модуля random:
  • random ‒ случайный
  • randint ‒ случайное (random) целое (integer)
из языка Python:
  • import ‒ импорт
  • from ‒ из (от)
  • def ‒ от define (определять)
  • for ‒ для
  • if ‒ если
  • else ‒ иначе

До сих пор в наших программах по экрану ходила одна черепаха. Однако модуль turtle языка программирования Python позволяет создать сразу несколько, и каждая будет рисовать свою графику. Правда в этом случае каждой черепахе-исполнителю надо будет дать имя, чтобы иметь возможность командовать одной отдельно от других.

"Дать имя черепахе" ‒ это значит, что сразу после создания, ее надо связать с именем переменной. То есть присвоить переменной черепаху-объект как значение. В turtle экземпляр черепахи создается от класса Turtle. Обратите внимание, что первая буква в названии класса заглавная. Это отличает его от названия самого модуля. Класс и модуль ‒ разные вещи. От классов создаются объекты-экземпляры. При этом после имени класса надо поставить скобки. Рассмотрим пример:

bob = Turtle()
bob.shape('turtle')
bob.color('blue')
bob.speed(10)
bob.teleport(-150, 50)

lucy = Turtle()
lucy.shape('square')
lucy.color('red')
lucy.speed(1)
lucy.teleport(150, -50)

bob.circle(-100)
lucy.circle(100, extent=270)

lucy_x, lucy_y = lucy.position()
bob.goto(lucy_x-20, lucy_y)
lucy.forward(100)

В нем мы создаем двух черепах. Одну называем bob, другую ‒ lucy. Также выполяем их первоначальную настройку. Методу shape можно передавать такие значения: 'arrow', 'turtle', 'circle', 'square', 'triangle', 'classic'. Скорость анимации перемещения черепахи устанавливается через speed. Число 10 ‒ самая быстрая, 1 ‒ самая медленная. Но 0 ‒ это отсутствие анимации, чертеж будет сразу появляться, а исполнитель оказываться в своей конечной точке.

Мы заставляем сначала Боба, а потом Люси начертить окружность. После этого запрашиваем координаты Люси с помощью метода position. Он возвращает объект, похожий на кортеж. В данном случае это будут два числа, помещенные в скобки. Первое из них присваивается переменной lucy_x, второе ‒ lucy_y. Возможность такой распаковки кортежа ‒ особенность языка программирования Python.

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

Если в вашей программе надо поменять размер черепахи, то следует воспользоваться методом shapesize. Также есть методы hideturtle, showturtle и isvisible, которые позволяют ее скрывать, отображать и проверять видимость.

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

Создадим функцию под именем settings. Пусть она принимает в себя объект-черепаху, который связывает с параметром item, а также ее форму, цвет, скорость и координаты.

def settings(item, form, color, speed, x, y):
    item.shape(form)
    item.color(color)
    item.speed(speed)
    item.teleport(x, y)

bob = Turtle()
settings(bob, 'turtle', 'blue', 10, -150, 50)
lucy = Turtle()
settings(lucy, 'square', 'red', 1, 150, -50)

Когда в основном коде мы создаем черепаху, то через имя ее переменной передаем в функцию. В теле функции этот объект присваивается другой переменной ‒ item. По большому счету у черепахи появляется второе имя, но она остается одной и той же.

Когда функция завершает свою работу после первого вызова, имя item забывает про связь с первым объектом. Поэтому, когда функция settings вызывается для Люси, item связывается уже с ней.

С остальными параметрами происходит примерно также. Они меняют свое значение в разных вызовах функции. Обратите внимание, что имя параметра может совпадать с каким-то другим именем или командой в программе. Однако Python понимает, что это разные имена. Так в выражении item.color(color) первое color ‒ это название метода, а второе ‒ параметр функции. Они не связаны. Мы могли бы назвать параметр по-другому.

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

bob = Turtle()
lucy = Turtle()

bob.teleport(-100, 0)
teleport(100, 0)

Люси останется в центре, Боб телепортируется влево, а черепаха по-умолчанию ‒ направо. Она создается не вами, а самим модулем turtle, как только вы вызываете метод без указания объекта. Так сделано для упрощения программирования, ведь в большинстве случаев мы командуем только одной черепахой.

Задания для самостоятельной работы

  1. Проверьте, может ли черепаха рисовать, если она скрыта.
  2. Как сделать так, чтобы при каждом нажатии на клавишу черепаха меняла свою форму на следующую. При этом последовательно перебирались все возможные для нее формы.
  3. В центре холста рисуется окружность. Две черепахи телепортируются в случайные места холста. Если какая-нибудь из них попадает внутрь окружности, то выводит сообщение "Я в круге".

Turtle. Программирование на Python для школьников




Все разделы сайта