Методы penup, pendown, width модуля turtle языка Python. Управление пером
Словарь урока
из модуля turtle: |
|
---|
Представим, что надо нарисовать пунктирную линию, используя при этом только ранее изученные нами команды. Очевидно, понадобится teleport
, так как только он дает возможность черепахе "перелететь по воздуху", не оставляя следа. Сами штрихи могут выводиться как командами forward
/backward
, так и goto
.
Так как teleport
оперирует координатами, а линия может идти не в строго горизонтальном или вертикальном направлении, пришлось бы выполнять сложные расчеты, чтобы отступать от черточек каждый раз на равную величину.
Однако проблема решается иначе. В модуле turtle языка Python есть методы penup
и pendown
. Представьте, что к черепахе прикреплено перо (pen ‒ пишущая ручка) или карандаш, и она может его то поднимать (up), то опускать (down). Если перо поднято, что бы не делала черепаха, она не может рисовать до тех пор, пока его не опустит.
Таким образом, команды forward
, backward
и goto
могут выполняться без черчения отрезков. При их выполнении черепаха может не оставлять следа. Тогда создать пунктирную линию становится просто:
teleport(-200, -50) setheading(30) forward(50) penup() forward(50) pendown() forward(50) penup() forward(50) pendown() forward(50) setheading(-30) forward(50) penup() forward(50) pendown() forward(50) penup() forward(50) pendown() forward(50)
После каждого forward
мы то опускаем, то поднимаем перо, переключая его состояние на обратное.
Рисование пунктирной линии ‒ это лишь пример случая, где уместно вызывать методы penup
и pendown
. Другой пример: после вывода на холсте элемента рисунка черепахе надо отступить от него на определенное расстояние, чтобы чертить следующий. Команда телепортации тут плохо подходит, так как вычислить, в какой точке закончит рисоваться первый элемент сложно. И, следовательно, сложно определить координату, куда надо перейти, чтобы отстоять от первой части изображения на заданном расстоянии. Поэтому здесь также полезны penup
и pendown
.
teleport(0, -100) backward(50) right(90) backward(50) right(45) backward(70) penup() backward(20) pendown() backward(70) left(45) backward(50) left(90) backward(50)
Модуль turtle позволяет черепахе не только поднимать и опускать перо, также менять его толщину и цвет. Как настраивается цвет, мы узнаем в следующих уроках. Что касается толщины, то ее можно устанавливать методами pensize
и width
. По-сути это разные названия одной команды. Если в них не передавать число, можно узнать, какая у пера толщина сейчас.
penup() backward(200) pendown() write(pensize()) forward(100) width(3) forward(100) pensize(7) forward(100) pensize(10) forward(100) write(width())
С помощью метода isdown
можно проверить, опущено сейчас перо или поднято. Если он возвращает True
, значит опущено. В случае Fasle
перо поднято, черепаха не рисует.
write(isdown()) forward(50) penup() write(isdown()) forward(50)
Кажется странным проверять опущено перо или нет, если мы и так видим в коде, какая команда ‒ penup
или pendown
‒ предшествует проверке. Мы уже знаем состояние пера. Зачем его проверять?
На самом деле команды проверки чего-либо часто используются в программировании. Потому что программы могут быть длинными, и для программиста не очевидно, что чему равно. Кроме того, состояния могут зависеть от случайных факторов, взаимодействия с пользователем и другого. То есть быть неизвестными на момент, когда программист пишет код. Поэтому в коде, перед выполнением определенных инструкций с помощью так называемого условного оператора, который мы будем изучать позже, выполняется необходимая проверка.
Сокращенные версии команд:
penup
‒pu
,up
pendown
‒pd
,down
Задания для самостоятельной работы
- Напишите код вывода на холсте пунктирной линии, идущей из верхнего левого в нижний правый угол.
- Вспомним, что функция
write
имеет параметрmove
. Если его связать сTrue
, то черепаха будет переходить к концу текста. При этом она начертит линию. Проверьте, будет ли она это делать, если перед этим поднять перо. - Надо нарисовать две вертикальные линии, отстоящие друг от друга на расстоянии 50 точек по вертикали. Создайте две программы, в одной из которых задание выполняется с помощью относительных команд, в другой ‒ с помощью абсолютных. Какую легче разработать, а в какой пришлось использовать больше разных команд?