Перезапуск программы ‒ методы reset и onkey модуля turtle языка Python

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

из модуля turtle:
  • teleport ‒ телепорт
  • forward ‒ вперед
  • left ‒ налево
  • setheading ‒ установить (set) направление (heading)
  • circle ‒ круг, окружность
  • steps ‒ шаги (step ‒ шаг)
  • fillcolor ‒ цвет (color) заливки (filling)
  • begin_fill ‒ начать (begin) заполнение (fill)
  • end_fill ‒ конец (end) заполнения (fill)
  • numinput ‒ ввод (input) числа (num, number)
  • onkey ‒ на (on) клавишу (key)
  • listen ‒ слушать, прослушивать
  • reset ‒ перезагрузить
  • clear ‒ чистый, ясный
из языка Python:
  • def ‒ сокращение от define (определить)

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

Чтобы реализовать такое, нам придется не только воспользоваться методами модуля turtle, но и написать свою функцию на языке Python. Пока простую, без параметров. К функциям мы еще будем возвращаться позже.

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

Если основной код программы исполняется сразу при ее запуске, то код, который находится в функции, ‒ нет. Чтобы он выполнился, функцию надо вызвать, то есть обратиться к ней по имени. Имена функциям даются произвольно, как и переменным.

В языке программирования Python, чтобы определить функцию, используется специальный оператор def, после которого идет имя функции, после имени идут скобки, после скобок ставится двоеточие. Далее с новой строки с отступом пишется код, который мы помещаем в функцию. Рассмотрим пример:

def angle():
    setheading(0)
    backward(100)
    left(45)
    forward(100)

teleport(-50, -25)
angle()
teleport(150, -25)
angle()

В нем мы определяем функцию под именем angle и "наполняем" ее командами, которые рисуют угол. Основной код начинается с первого teleport. Отсюда программа начнет исполняться. После teleport мы видим имя функции. Здесь функция уже не определяется, а вызывается. Это значит, что исполнитель-черепашка начинает читать код, который заключен в вызываемую функцию, то есть черепаха как бы переходит внутрь функции angle, в ее тело. Когда она исполнит весь код там, то вернется в основной код. В то место, откуда уходила.

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

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

onkey(angle, 'a')

Функция angle должна быть до этого определена. Кроме того, чтобы программа постоянно "прослушивала" события клавиатуры, надо вызвать метод listen.

Таким образом, если мы поместим код программы в функцию, а в основной ее части вызовем onkey и linsten, код будет выполняться по требованию.

def fun():
    reset()
    circle(100)

onkey(fun, 'space')
listen()

В коде выше мы использовали еще один новый для нас метод ‒ reset. Он очищает холст и устанавливает черепаху в его центре, то есть возвращает холст в исходное состояние. В данной программе, если убрать reset, новый круг будет чертиться поверх старого.

В методе onkey в качестве клавиши мы указали 'space' ‒ так называется клавиша пробела.

Когда функция вызывается сама по себе, после нее пишутся скобки. Когда же она вызывается в скобках другой функции, то скобки после нее не пишутся.

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

  1. Разработайте программу, в которой есть несколько разных функций, каждая из которых рисует свою раскрашенную фигуру в своем месте холста. В основном коде каждую функцию свяжите со своей клавишей.
  2. В отличие от reset, метод clear просто очищает экран, а черепаху оставляет там, где она была. Как можно запрограммировать черепаху, чтобы она перемещалась стрелками клавиатуры? Названия клавиш стрелок: "Up", "Down", "Left", "Right".

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




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