Python: Что такое переменная
Представьте, что нужно напечатать фразу Father! два раза:
print('Father!')
print('Father!')Такой способ вполне подойдет, если фраза встречается всего пару раз. Но что, если она будет использоваться часто, в разных частях программы? Тогда придется копировать одно и то же выражение снова и снова.
А что будет, если фразу нужно изменить, например заменить Father! на Mother!? Придется искать и исправлять все вхождения вручную. Это неудобно и приводит к ошибкам.
Переменные
Чтобы не дублировать одну и ту же строку, ее можно сохранить в переменной и распечатывать ее содержимое:
greeting = 'Father!'
print(greeting)
print(greeting)Результат:
Father!
Father!
Переменная представляет собой имя, за которым хранится значение. В нашем примере мы создали переменную с именем greeting и записали в нее строку 'Father!'.
greeting = 'Father!'
Переменная Значение
┌──────────┐ ┌──────────┐
│ greeting │ ──→ │ 'Father!'│
└──────────┘ └──────────┘Строчка greeting = 'Father!' читается так: "возьми значение 'Father!' и присвой его переменной с именем greeting". Знак = здесь является оператором присваивания, а не обозначением равенства как в математике. Он кладет значение в переменную.
Когда мы пишем print(greeting), интерпретатор подставляет вместо имени greeting то значение, которое в ней хранится. В результате на экран выводится строка 'Father!'.
print(greeting)
|
v
print('Father!')Имена переменных
Имена переменных придумывает сам программист. В Python можно использовать:
- Латинские буквы (a-z, A-Z),
- цифры (но не в начале),
- нижнее подчеркивание _.
Примеры допустимых имен: greeting, name1, hello_world. Python различает строчные и заглавные буквы. Переменные greeting, Greeting и GREETING являются тремя разными переменными.
Переменные и литералы
В коде важно различать, где мы используем переменную, а где записываем значение напрямую. Это особенно заметно на примере с print():
greeting = 'Mother!'
print(greeting) # => Mother!
print('greeting') # => greetingВ первом случае используется переменная greeting, и программа подставляет ее значение. Во втором случае 'greeting' заключено в кавычки, поэтому это строковый литерал, то есть готовое значение, написанное прямо в коде. Несмотря на то, что мы видим слово greeting в обоих случаях, с точки зрения интерпретатора это абсолютно разные вещи.
Литералы представляют собой данные, записанные явно (например, 'Hello', 42, 3.14). Идентификаторы являются именами переменных и функций (например, greeting, print), которые указывают на уже существующие значения или команды.
Порядок использования
Переменную нужно сначала создать (присвоить ей значение), а уже потом использовать. Если попытаться обратиться к переменной до ее создания, программа выдаст ошибку:
print(name) # Ошибка: переменная еще не определена
# NameError: name 'name' is not defined
name = 'Alice'Такая ошибка называется "обращение к необъявленной переменной". Ее достаточно легко исправить, потому что текст ошибки однозначно говорит о том, какая переменная используется до объявления.
А в правильном порядке все работает:
name = 'Alice'
print(name) # => AliceНесколько переменных в программе
В одной программе можно создать сколько угодно переменных. Каждая хранит свои данные и не мешает другим:
greeting1 = 'Father!'
print(greeting1)
print(greeting1)
greeting2 = 'Mother!'
print(greeting2)
print(greeting2)Как понять, когда нужно несколько переменных? Количество переменных зависит от логики программы. Эта тема подробно раскрывается позже, когда мы столкнемся с функциями и условными конструкциями.
Где создавать переменные
Программисты стараются создавать переменные ближе к месту, где они используются. Это делает код более читаемым. Особенно важно это в больших программах, где переменных может быть десятки и сотни тысяч.
Задание
URL сайта используется в программе в нескольких местах. Чтобы не дублировать строку, сохраним ее в переменную.
Создайте переменную url со значением https://hexlet.io и выведите ее на экран дважды.
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import runpy
def test(capsys):
expected = "https://hexlet.io\nhttps://hexlet.io"
runpy.run_module('solution')
out, _ = capsys.readouterr()
assert out.strip() == expectedРешение учителя откроется через:
20:00
