Python: Что такое переменная
Представьте, что нужно напечатать фразу Father! два раза:
print('Father!')
print('Father!')
Такой способ вполне подойдёт, если фраза встречается всего пару раз. Но что, если она будет использоваться часто, в разных частях программы? Тогда придётся копировать одно и то же выражение снова и снова.
А что будет, если фразу нужно изменить — например, заменить Father! на Mother!? Придётся искать и исправлять все вхождения вручную. Это неудобно и приводит к ошибкам.
Переменные
Чтобы не дублировать одну и ту же строку, её можно сохранить в переменной и распечатывать ее содержимое:
greeting = 'Father!'
print(greeting)
print(greeting)
Результат:
Father!
Father!
Переменная — это имя, за которым хранится значение. В нашем примере мы создали переменную с именем greeting
и записали в неё строку 'Father!'
.
Строчка greeting = 'Father!'
читается так: «возьми значение 'Father!'
и присвой его переменной с именем greeting
». Знак =
здесь не означает равенство, как в математике, а является оператором присваивания. Он кладёт значение в переменную.
Когда мы пишем print(greeting)
, интерпретатор подставляет вместо имени greeting
то значение, которое в ней хранится. В результате на экран выводится строка '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(something)
без создания самой переменной something
? Интерпретатор выдаст ошибку, что мы пытаемся использовать переменную, которая не определена. Переменную от строки он отличает по наличию или отсутствию кавычек.
Порядок использования
Переменную нужно сначала создать (присвоить ей значение), а уже потом использовать. Если попытаться обратиться к переменной до её создания, программа выдаст ошибку:
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)
Как понять когда нужно несколько переменных? Количество переменных зависит от логики программы. Эта тема подробно раскрывается позже, когда мы столкнемся с функциями, условными конструкциями
Где создавать переменные
Программисты стараются создавать переменные ближе к месту, где они используются. Это делает код более читаемым. Особенно важно это в больших программах, где переменных может быть десятки и сотни тысяч.
Задание
Создайте переменную с именем motto
и содержимым What Is Dead May Never Die!
. Распечатайте содержимое переменной.
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
from hexlet.test import expect_output
def test(capsys):
expected = "What Is Dead May Never Die!"
expect_output(capsys, expected)
Решение учителя откроется через:
20:00
