Переменные в черепашьей графике (модуль turtle языка Python)
Словарь урока
из модуля turtle: |
|
---|
В прошлом уроке полученные от textinput
и numinput
данные мы сразу передавали в другие функции. Иначе, они бы просто потерялись. Мы не могли сначала в одной строке кода вызвать textinput
, а на следующей ‒ write
, потому что в языках программирования данные сами по себе не перетекают по потоку выполнения программы.
В программировании для доступа к данным используются переменные. Перед этим переменная связывается с данными, обычно говорят "значение присваивается переменной".
У любой переменной есть три характеристики. Это ее имя, присвоенное ей значение (фактические данные, конкретная информация), а также тип переменной, который зависит от значения (целочисленный тип, строковый и многие другие).
Имя переменной может быть почти любым. Это не команда языка программирования, которую надо запоминать и знать, что она делает. Имена переменных придумывает программист. Желательно, чтобы они были осмысленными. Также есть некоторые ограничения на имена. Например, нельзя чтобы оно начиналось с цифры или содержало пробелы. Обычно в качестве имени переменной используется какая-нибудь английская буква или слово.
Данные связываются с именем переменной через знак равенства, который в таком выражении является оператором присваивания.
В нашем примере мы сможем вызывать write
отдельно, если присвоим то, что возвращает textinput
, переменной:
a = textinput('Имя', 'Введите ваше имя') write(a)
Отследим, как выполняется такой код. Сначала вызывается textinput
. Строка, которую вводит пользователь, возвращается в программу. Эта строка ‒ значение, или данные. Строка присваивается переменной с именем a. В следующем выражении вызывается функция write
. В качестве ее аргумента мы передаем переменную. Перед тем, как write
будет вызван, в него вместо имени переменной будет подставлено ее значение. Метод write
выведет на холсте не имя переменной, а ее значение.
В такой простой программе необходимость переменной сомнительна. Можно обойтись без нее, как мы это делали на прошлом уроке. Однако в более сложных программах переменные просто необходимы. Представьте, что пользователь вводит радиус, а черепаха рисует на холсте несколько разных фигур с одним и тем же радиусом:
radius = numinput('Радиус', 'От 50 до 100', 50, 50, 100) teleport(150, 100) circle(radius) teleport(-150, 100) circle(radius, steps=16) teleport(-150, -200) circle(radius, steps=8) teleport(150, -200) circle(radius, steps=3)
Если бы мы с помощью переменной не "запомнили" число, которое ввел пользователь, нам бы пришлось его переспрашивать, то есть несколько раз вызывать numinput
. При этом человек мог бы вводить разные значения. Если логика выполнения программы предполагает, что все фигуры должны быть одинакового радиуса, то ситуация выглядела бы нелепой.
Переменные не только хранят значения. С ними можно выполнять различные арифметические действия. В программе ниже если radius
получит значение 150, то вторая окружность будет иметь радиус 130, третья ‒ 110, а четвертая ‒ 90 точек:
radius = numinput('Радиус', 'От 100 до 150', 100, 100, 150) circle(radius) circle(radius - 20) circle(radius - 40) circle(radius - 60)
В программе может быть далеко не одна переменная:
radius = numinput('Радиус', 'От 100 до 150', 100, 100, 150) offset = numinput('Смещение', 'От 10 до 30', 20, 10, 30) circle(radius) circle(radius - offset) circle(radius - offset * 2) circle(radius - offset * 3)
Значение переменной не обязательно берется от пользователя. Его может задавать сам программист. Спрашивается, зачем, если он всегда может изменить число или строку непосредственно в коде, когда его пишет? Это делается для удобства. Допустим, у нас есть такой код:
forward(100) right(90) forward(100) right(90) forward(100) right(90) forward(100) right(90)
Очевидно, он рисует квадрат со сторонами в 100 точек. Представьте, что мы решили поменять длину стороны на 89. Нам придется исправить значение в четырех местах. Если программа еще больше, или одно и то же значение надо менять в совсем разных местах, то можно где-то забыть это сделать, не заметить старое значение. Куда проще и надежней использовать переменную:
side = 89 forward(side) right(90) forward(side) right(90) forward(side) right(90) forward(side) right(90)
Теперь, если потребуется изменить размер квадрата, достаточно поменять число в одном месте ‒ там, где переменная определяется. Обычно это делают в начале программы. И не только потому что так нагляднее. Во многих языках программирования нельзя в коде упоминать переменную до того, как она была объявлена. Это касается и языка Python. В примере выше, если перенести выражение side = 89
в конец, программа не сможет выполниться, в ней будет ошибка.
Задания для самостоятельной работы
- Запросите у пользователя два числа. Пусть черепаха выведет их сумму, разность, произведение и частное.
- Напишите программу, которая рисует пунктирную линию. При этом длина штриха и пропуска должны контролироваться через переменные.
- Напишите код, который доказывает, что в процессе выполнения программы переменная может менять свое значение.