Урок 2. Переменные и типы данных
Программа работает с данными: числами, текстом, ответами «да» и «нет». Чтобы запомнить значение и пользоваться им дальше, его кладут в переменную — имя, к которому привязано значение. В этом уроке — как создавать переменные, как их называть и какие бывают типы данных.
Как создать переменную
Переменная появляется, когда ей впервые присваивают значение — знаком =:
age = 15
name = "Аня"
print(name)
print(age)
age = age + 1
print(age)Аня
15
16Знак = в Python — не равенство, а команда «вычисли то, что справа, и запомни под именем слева». Поэтому запись age = age + 1, странная для математики, в программе совершенно нормальна: Python берёт старое значение 15, прибавляет 1 и кладёт результат 16 обратно в age. Старое значение при этом забывается.
В Pascal для присваивания пишут :=, а переменные объявляют заранее в разделе var с указанием типа. В Python объявлять ничего не нужно: переменная создаётся первым присваиванием.
Пользоваться переменной можно только после того, как она создана. Если обратиться к имени, которому ничего не присвоено (или ошибиться в нём на одну букву), программа остановится с ошибкой:
NameError: name 'agee' is not definedИмена переменных
Правила простые:
- в имени могут быть буквы, цифры и знак подчёркивания
_; - имя не может начинаться с цифры:
2xнельзя,x2можно; - большие и маленькие буквы различаются:
Ageиage— две разные переменные; - нельзя брать служебные слова языка:
if,for,while,def,class,Trueи другие.
Русские буквы в именах 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:
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, нет:
print(2 ** 100)1267650600228229401496703205376** — возведение в степень.
Число и строка — разные вещи
print(5 + 3)
print("5" + "3")
print("5" * 3)8
53
555Для чисел + — сложение, для строк — склейка. Строку можно и умножить на целое число: она повторится столько раз. А вот сложить строку с числом нельзя:
TypeError: can only concatenate str (not "int") to strТакое сообщение означает, что к строке пытались прибавить число. Чаще всего так бывает с числом, введённым с клавиатуры, — об этом следующий урок.
Преобразование типов
Чтобы перевести значение в другой тип, имя типа вызывают как функцию:
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
-7int(...)— в целое число. Из дробного числаintпросто отбрасывает дробную часть, а не округляет:int(7.9)даёт 7. Как округлять — в справке Как округлить число.float(...)— в дробное число.str(...)— в строку.
Перевести можно не всё. Строка "2.5" не превращается в целое число, а "abc" — ни в какое:
ValueError: invalid literal for int() with base 10: '2.5'Несколько переменных сразу
Можно присвоить значения сразу нескольким переменным, а также поменять их местами без третьей переменной:
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Тип у значения, а не у переменной
Одна и та же переменная может хранить сначала число, потом строку: тип принадлежит значению, а имя просто указывает на него.
value = 10
print(type(value))
value = "десять"
print(type(value))<class 'int'>
<class 'str'>Python это позволяет, но в своих программах так лучше не делать: когда в переменной то число, то текст, легко запутаться.
Коротко
- Переменная создаётся присваиванием
имя = значение;=— команда «запомни», а не равенство. - Имя — латиница, цифры и
_, не с цифры; регистр букв важен. - Основные типы:
int(целое),float(дробное, через точку),str(текст в кавычках),bool(True/False). type(x)показывает тип;int(),float(),str()переводят из типа в тип.int()отбрасывает дробную часть;"5" + "3"— это"53", а не 8.