Перезапуск программы ‒ методы reset и onkey модуля turtle языка Python
| из модуля turtle: |
|
|---|---|
| из языка Python: |
|
Во всех предыдущих уроках, чтобы заново исполнить исходный код и пересмотреть, как черепаха что-то рисует, нам приходилось закрывать окно с холстом и снова запускать программу на исполнение. Было бы удобней, чтобы программа сама умела перезапускаться, например, при нажатии на какую-нибудь клавишу клавиатуры.
Чтобы реализовать такое, нам придется не только воспользоваться методами модуля 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 и listen, код будет выполняться по требованию.
def fun(): reset() circle(100) onkey(fun, 'space') listen()
В коде выше мы использовали еще один новый для нас метод ‒ reset. Он очищает холст и устанавливает черепаху в его центре, то есть возвращает холст в исходное состояние. В данной программе, если убрать reset, новый круг будет чертиться поверх старого.
В методе onkey в качестве клавиши мы указали 'space' ‒ так называется клавиша пробела.
Когда функция вызывается, после нее пишутся скобки. Когда же функция не вызывается, а передается в качестве аргумента другой функции, то скобки после нее не пишутся.
Задания для самостоятельной работы
- Разработайте программу, в которой есть несколько разных функций, каждая из которых рисует свою раскрашенную фигуру в своем месте холста. В основном коде каждую функцию свяжите со своей клавишей.
- Как можно запрограммировать черепаху, чтобы она перемещалась стрелками клавиатуры? Названия клавиш стрелок:
"Up","Down","Left","Right".