Глиф Учебники

Урок 2. Переменные и типы данных

Курс «Python» · урок 2 из 10 · 4 минуты чтения

Программа работает с данными: числами, текстом, ответами «да» и «нет». Чтобы запомнить значение и пользоваться им дальше, его кладут в переменную — имя, к которому привязано значение. В этом уроке — как создавать переменные, как их называть и какие бывают типы данных.

Как создать переменную

Переменная появляется, когда ей впервые присваивают значение — знаком =:

Python
age = 15
name = "Аня"
print(name)
print(age)
age = age + 1
print(age)
Вывод
Аня
15
16

Знак = в Python — не равенство, а команда «вычисли то, что справа, и запомни под именем слева». Поэтому запись age = age + 1, странная для математики, в программе совершенно нормальна: Python берёт старое значение 15, прибавляет 1 и кладёт результат 16 обратно в age. Старое значение при этом забывается.

age = 15 age 15 тип int age = age + 1 age age 15 + 1 16 забыто тип int
Имя age — ярлык на значении: после age = age + 1 Python вычисляет 15 + 1 и переносит ярлык на 16, а старое значение 15 забывается.

В Pascal для присваивания пишут :=, а переменные объявляют заранее в разделе var с указанием типа. В Python объявлять ничего не нужно: переменная создаётся первым присваиванием.

Пользоваться переменной можно только после того, как она создана. Если обратиться к имени, которому ничего не присвоено (или ошибиться в нём на одну букву), программа остановится с ошибкой:

Текст
NameError: name 'agee' is not defined

Имена переменных

Правила простые:

Русские буквы в именах Python допускает, но так почти никто не пишет: имена принято давать латиницей, по-английски или транслитом. Если имя из нескольких слов, их соединяют подчёркиванием: user_name, total_sum. Хорошее имя объясняет, что лежит в переменной: price понятнее, чем p, а count_students — чем x1.

ИмяМожно ли
totalможно
max_markможно
_tempможно
2nd_placeнельзя: начинается с цифры
my-nameнельзя: дефис — это знак минуса
forнельзя: служебное слово

Не называйте переменные именами готовых функций — print, input, list, str, sum. Python это разрешит, но функция с таким именем перестанет работать до конца программы, и ошибка появится в неожиданном месте.

Типы данных

У каждого значения есть тип — вид данных. С разными типами работают по-разному: числа складывают, текст склеивают. Для начала хватит четырёх типов:

ТипЧто хранитПримеры
intцелое число42, -7, 0
floatдробное число3.14, -0.5, 2.0
strстрока — текст"Минск", 'а', ""
boolлогическое значение: да или нетTrue, False

Тип значения показывает функция type:

Python
print(type(42))
print(type(3.14))
print(type("42"))
print(type(True))
Вывод
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>

Обратите внимание: "42" в кавычках — это строка, а не число, хотя выглядит как число.

Дробную часть в Python отделяют точкой, а не запятой. Запись x = 3,14 ошибки не даст, но в x окажется не число, а пара чисел 3 и 14. Такие ошибки трудно заметить.

Целые числа в Python могут быть сколь угодно большими — ограничений, как у integer в Pascal, нет:

Python
print(2 ** 100)
Вывод
1267650600228229401496703205376

** — возведение в степень.

Число и строка — разные вещи

Python
print(5 + 3)
print("5" + "3")
print("5" * 3)
Вывод
8
53
555

Для чисел + — сложение, для строк — склейка. Строку можно и умножить на целое число: она повторится столько раз. А вот сложить строку с числом нельзя:

Текст
TypeError: can only concatenate str (not "int") to str

Такое сообщение означает, что к строке пытались прибавить число. Чаще всего так бывает с числом, введённым с клавиатуры, — об этом следующий урок.

Преобразование типов

Чтобы перевести значение в другой тип, имя типа вызывают как функцию:

Python
a = int("25")
b = float("2.5")
c = str(100)
print(a + 5)
print(b * 2)
print(c + "0")
print(int(7.9))
print(int(-7.9))
Вывод
30
5.0
1000
7
-7

Перевести можно не всё. Строка "2.5" не превращается в целое число, а "abc" — ни в какое:

Текст
ValueError: invalid literal for int() with base 10: '2.5'
было стало "25" str int() 25 int "2.5" str float() 2.5 float 100 int str() "100" str 7.9 float int() 7 int дробная часть отброшена "2.5" str int() ValueError в целое не переводится
Функции int(), float() и str() переводят значение в другой тип: int(7.9) отбрасывает дробную часть, а строку "2.5" в целое число перевести нельзя — будет ValueError.

Несколько переменных сразу

Можно присвоить значения сразу нескольким переменным, а также поменять их местами без третьей переменной:

Python
x, y = 10, 20
print(x, y)
x, y = y, x
print(x, y)
a = b = 0
print(a, b)
Вывод
10 20
20 10
0 0

Тип у значения, а не у переменной

Одна и та же переменная может хранить сначала число, потом строку: тип принадлежит значению, а имя просто указывает на него.

Python
value = 10
print(type(value))
value = "десять"
print(type(value))
Вывод
<class 'int'>
<class 'str'>

Python это позволяет, но в своих программах так лучше не делать: когда в переменной то число, то текст, легко запутаться.

Коротко

Проверьте себя

1. Что окажется в переменной n после этих строк?
Python
n = 4
n = n * 2
n = n + 1
2. Какое имя переменной допустимо в Python?
3. Что выведет print(type("3.5"))?
4. Что выведет print(int(9.99))?