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