Переменные в черепашьей графике (модуль turtle языка Python)

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

из модуля turtle:
  • teleport ‒ телепорт
  • forward ‒ вперед
  • right ‒ направо
  • write ‒ писать, записывать
  • penup ‒ перо (pen) вверх (up)
  • pendown ‒ перо (pen) вниз (down)
  • circle ‒ круг, окружность
  • steps ‒ шаги (step ‒ шаг)
  • textinput ‒ ввод (input) текста (text)
  • numinput ‒ ввод (input) числа (num, number)
  • default ‒ по умолчанию
  • minvalue ‒ минимальное (minimum) значение (value)
  • maxvalue ‒ максимальное (maximum) значение (value)

В прошлом уроке полученные от 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 в конец, программа не сможет выполниться, в ней будет ошибка.

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

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




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