В прошлом уроке вы вызывали готовые функции вроде print("текст") с готовым значением прямо внутри скобок. Но что делать, если значение нужно использовать несколько раз или менять по ходу программы? Для этого данные сохраняют под именем — в переменной.
Что такое переменная
Представьте камеру хранения на вокзале: у каждой ячейки есть номер, вы кладёте туда вещь и потом называете номер, чтобы её забрать. Переменная работает похоже — только вместо номера у неё имя, а вместо вещи — данные: число, текст или любое другое значение.
Термин
Переменная (англ. variable) — это имя, под которым Python хранит значение в памяти компьютера. Создать переменную значит написать её имя, поставить знак = и указать значение справа.
age = 21
Разбор строки:
age— имя, которое вы придумали сами. Python ещё не знает про такое имя, пока вы его не создадите.=— знак присваивания. Он не означает «равно», как в математике, а означает команду «сохрани то, что справа, под именем слева».21— значение, которое нужно сохранить.
После этой строки где угодно дальше в программе можно написать age, и Python подставит вместо него 21. Ещё переменную можно перезаписать — старое значение исчезнет, а на его месте появится новое:
score = 0
print(score) # 0
score = 10
print(score) # 10
Здесь происходит следующее:
- Строка 1: в переменную
scoreкладётся 0. - Строка 2:
print(score)смотрит, что лежит вscore, и печатает это. На экране будет 0. - Строка 4: в
scoreкладётся новое значение 10, старое (0) уже не существует. - Строка 5:
print(score)снова заглядывает в ячейку и печатает уже 10.
Как называть переменные
Имя переменной вы придумываете сами, но не любое слово подойдёт. У Python есть жёсткие правила, которые он проверяет, и есть общепринятые привычки, которые он не проверяет, но которых придерживаются все программисты — чтобы чужой код было легко читать.
Термин
Соглашение об оформлении кода на Python называется PEP 8 (Python Enhancement Proposal 8) — официальный документ с рекомендациями по стилю. Правило для имён переменных из PEP 8 называется snake_case: все буквы строчные, слова разделены нижним подчёркиванием.
Можно
- user_name
- total_price
- age2
- is_active
Нельзя
- 2name — начинается с цифры
- user-name — дефис запрещён
- user name — пробел запрещён
- for — занято самим Python
Зарезервированные слова
Часть слов Python использует для собственных команд, и их нельзя брать в качестве имени переменной — Python выдаст ошибку. Самые частые из них:
first_name = "Мария"
last_name = "Иванова"
age_in_years = 30
Какие бывают значения: типы данных
Число и слово устроены по-разному: число можно умножить, а слово — нет, зато слово можно поставить в кавычки и склеить с другим словом. Чтобы Python знал, как обращаться со значением, у каждого значения есть тип.
Термин
Тип данных — это категория, к которой относится значение, и она определяет, какие операции с ним допустимы. Python определяет тип автоматически по тому, как вы записали значение — объявлять его отдельно не нужно. Узнать тип поможет уже знакомая вам функция type().
В этом курсе вы будете чаще всего встречать четыре типа:
| int | целое число | 23 |
| float | дробное число | 1.82 |
| str | строка (текст в кавычках) | "Алексей" |
| bool | истина или ложь | True |
name = "Алексей" # str — текст в кавычках
age = 23 # int — целое число
height = 1.82 # float — есть точка и дробная часть
is_student = True # bool — True или False, с заглавной буквы
print(type(name)) # <class 'str'>
print(type(age)) # <class 'int'>
print(type(height)) # <class 'float'>
print(type(is_student)) # <class 'bool'>
Как Python определяет тип по записи:
- Есть кавычки — значит
str, даже если внутри цифры:"23"это текст, а не число. - Нет кавычек, нет точки — значит
int:23. - Нет кавычек, есть точка — значит
float:1.82. - Слово
TrueилиFalseс заглавной буквы и без кавычек — значитbool. type()заглядывает внутрь переменной и называет её тип: результат всегда выглядит как<class 'имя_типа'>.
"23" и 23 — разные вещи
Кавычки полностью меняют тип значения. age = "23" — это строка из двух символов, с ней нельзя делать то, что можно делать с числом. Позже, в уроке про ввод данных, вы увидите, к чему приводит эта путаница на практике.
Выводим переменные: f-строки
Как напечатать одну переменную, вы уже знаете: print(score). А ещё print умеет печатать несколько значений через запятую — это было в уроке про готовые функции. Значит, в одном print можно смешивать текст и переменные:
name = "Катя"
age = 22
print("Меня зовут", name)
print("Мне", age, "лет")
# Меня зовут Катя
# Мне 22 летРазбор строки print("Мне", age, "лет"):
"Мне"и"лет"— текст в кавычках, печатается как есть.age— без кавычек, поэтому Python печатает не слово age, а значение переменной:22.- Запятые разделяют части, а
printсам ставит между ними пробел.
Работает. Но попробуйте собрать всё в одно предложение — с запятой после имени:
print("Меня зовут", name, ", мне", age, "лет")
# Меня зовут Катя , мне 22 летВидите лишний пробел перед запятой? print честно ставит пробел между всеми частями, в том числе перед ", мне". А ещё в такой строке легко запутаться в кавычках и запятых. Для таких случаев в Python есть особый вид строки.
Термин
f-строка (англ. f-string, форматированная строка) — это строка с буквой f перед открывающей кавычкой, внутри которой в фигурных скобках { } можно писать имя переменной. Python подставит на это место её значение.
name = "Катя"
age = 22
print(f"Меня зовут {name}, мне {age} лет")
# Меня зовут Катя, мне 22 летТот же результат — но без лишнего пробела и без нагромождения кавычек: всё предложение записано одной строкой, а переменные стоят ровно там, где должны оказаться их значения.
Разбор строки print(f"Меня зовут {name}, мне {age} лет"):
fперед первой кавычкой сообщает Python: внутри этой строки ищи фигурные скобки и подставляй в них значения.- Текст вне скобок —
Меня зовут, запятая,мне,лет— печатается как есть, буква в букву. {name}заменяется на значение переменнойname, то есть наКатя.{age}заменяется на значение переменнойage, то есть на22.- Обычные кавычки в конце строки закрывают f-строку, а внешние скобки
print(...)— это вызов функции, которая печатает готовый результат.
True/False в текст при подстановке, отдельно ничего конвертировать не нужно.Комментарии: заметки внутри кода
Иногда код сам по себе не объясняет, зачем в нём именно такое значение. Например, почему скидка именно 0.1, а не 0.15? Для таких пояснений в код добавляют текст, который Python не выполняет — он существует только для человека, который читает код.
Термин
Комментарий — это часть строки после символа #. Python доходит до # при чтении кода и пропускает всё, что идёт за ним до конца строки.
# создаём переменную для скидки постоянного клиента
discount = 0.1
price = 500 # цена в рублях, без учёта скидки
price = 500, а всё, что после #, проигнорирует.Частые ошибки
Перепутать = и ==
Начинающие часто пишут =, когда имеют в виду сравнение. Но = — это всегда присваивание, а сравнение (которое вы изучите позже) записывается двумя знаками ==. Пока просто помните: один знак = означает «сохранить значение».
Использовать переменную до её создания
Python читает программу сверху вниз. Если переменная встречается в коде раньше, чем строка с =, которая её создаёт, Python выдаст ошибку NameError: name 'age' is not defined — он ещё не знает такого имени.
print(age) # NameError: name 'age' is not defined
age = 20 # переменная создана только здесь, слишком поздно
Забыть букву f перед строкой
Если написать print("Возраст: {age}") без f перед кавычками, Python не станет ничего подставлять — на экране появятся ровно фигурные скобки с именем переменной внутри, как обычный текст.
age = 20
print("Возраст: {age}") # Возраст: {age} — подстановки не будет
print(f"Возраст: {age}") # Возраст: 20 — теперь верно
Что важно запомнить
имя = значение, знак = означает присваивание, а не равенство.int (целое число), float (дробное число), str (текст в кавычках), bool (True или False). Тип определяется автоматически по записи значения, проверить его можно функцией type().f перед кавычками плюс имя переменной в фигурных скобках { } — удобный способ собрать несколько значений в одно предложение для вывода.# и продолжается до конца строки. Python его не выполняет, он существует для человека, читающего код.Проверьте себя
3 вопроса
Анкета пользователя
В заготовке уже заданы четыре переменные: name (строка), age (целое число), height (дробное число) и is_student (булево значение). Допишите одну строку с print() и f-строкой, чтобы программа вывела ровно:
Имя: Мария, Возраст: 24, Рост: 1.68, Студент: True
Поменяйте переменные местами
В заготовке заданы переменные a = 5 и b = 10. Сделайте так, чтобы после вашего кода в a лежало значение 10, а в b — значение 5, то есть поменяйте их значения местами. Использовать литералы 5 и 10 напрямую в новых присваиваниях нельзя — решение должно работать для любых начальных значений a и b, а не только для этих двух чисел.