Преобразование типов в Python: int(), float(), str(), bool()
Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе
Представьте, что вы спросили человека о возрасте, и он написал ответ на стикере. Теперь у вас есть текст «25», но с надписью на стикере считать не получится. Сначала нужно прочитать текст и в уме превратить его в настоящее число.
Python работает так же. Данные часто приходят в одном типе, а нужны в другом. Пользователь вводит в форму «42», и это строка, а не число. Прежде чем складывать, вычитать или сравнивать это значение, его нужно преобразовать.
В этом уроке вы научитесь уверенно и безопасно преобразовывать типы данных Python. Вы узнаете, какие преобразования происходят автоматически, какие нужно выполнять самостоятельно и как избежать ошибок, на которых спотыкаются новички.
Что такое преобразование типов в Python?
Преобразование типов означает перевод значения из одного типа данных в другой. Например, строку "42" можно превратить в целое число 42, а целое число 10 в float 10.0.
В Python есть два вида преобразования типов. Неявное преобразование происходит автоматически: Python незаметно выполняет его за вас. Явное преобразование вы выполняете сами, с помощью функции вроде int() или str().
Неявное преобразование похоже на автозамену в телефоне, которая сама исправляет слово. Явное преобразование похоже на то, как вы правите слово вручную. Оба способа делают своё дело, но при ручном у вас больше контроля.
7.0 <class 'float'> 30
Как работает неявное преобразование типов в Python
Когда в арифметическом выражении смешиваются целое число и float, Python автоматически преобразует целое число во float. Это называется неявным преобразованием (или приведением типов). Python всегда приводит значение к более «широкому» типу, чтобы данные не потерялись.
Это как перелить воду из маленькой чашки в большое ведро. Вода (ваши данные) остаётся той же, только живёт теперь в ёмкости побольше. Переход от int к float безопасен, потому что float может хранить любое целое значение.
7.0 15.0 5.0 6 10 3.5
7.0 Error: can only concatenate str (not "int") to str
Как преобразовать значение в целое число с помощью int()
Функция int() преобразует значение в целое число. Преобразовывать можно float, строки и логические значения. Каждый тип ведёт себя немного по-своему.
Преобразование float в целое число
При преобразовании float в целое число Python отбрасывает дробную часть: всё после десятичной точки отсекается. Округления не происходит. Это как отрезать верёвку: всё, что свисает дальше отметки, отпадает.
3 3 -2 99 4 3
Преобразование строк в целые числа
Строку можно преобразовать в целое число, только если в ней записано корректное целое число. Пробелы вокруг числа допустимы, а вот десятичная точка или буквы вызовут ошибку.
42 -7 100 1 0
Как преобразовать значение в float с помощью float()
Функция float() преобразует значение в число с плавающей точкой. Она принимает целые числа, строки и логические значения.
Преобразовать целое число во float всегда безопасно. Ничего не теряется, к числу в конце добавляется .0. Это как дописать к цене нули после запятой: 5 рублей превращаются в 5,00 рубля.
42.0 -7.0 0.0 3.14 7.0 -2.5 1.0 0.0
Как преобразовать значение в строку с помощью str()
Функция str() превращает любое значение в его строковое представление. Это самая снисходительная функция преобразования: она работает почти со всем.
Чаще всего str() нужна, когда вы собираете сообщение из текста и чисел. Python не позволит склеить строку и число через +, поэтому число сначала превращают в строку.
42 3.14 -7 True False None I am 25 years old
name = "Alice"
age = 25
print("Name: " + name + ", Age: " + str(age))name = "Alice"
age = 25
print(f"Name: {name}, Age: {age}")Как преобразовать значение в логическое с помощью bool()
Функция bool() превращает значение в True или False. Правило простое: пустые и нулевые значения дают `False`, всё остальное даёт `True`.
Это как спросить: «Здесь что-нибудь есть?» Пустая коробка даёт False. Коробка, в которой что-то лежит, пусть даже скомканный листок бумаги, даёт True.
False False False False --- True True True True True
True True True True False
Частые ошибки преобразования типов в Python
Не всякое преобразование возможно. Когда Python не может преобразовать значение, он выбрасывает ValueError. Это самая частая ошибка, с которой новички сталкиваются при преобразовании типов.
Это как пытаться перевести слово, которого нет в другом языке. Python смотрит на значение, пробует его преобразовать и говорит: «Понятия не имею, как превратить это в число».
Error 1: invalid literal for int() with base 10: 'hello' Error 2: invalid literal for int() with base 10: '3.14' Error 3: could not convert string to float: 'abc'
Краткая шпаргалка о том, что работает, а что нет:
| Преобразование | Пример | Результат |
|---|---|---|
int("42") | Строка из цифр | 42 |
int("3.14") | Строка с дробным числом | ValueError |
int("hello") | Нечисловая строка | ValueError |
float("3.14") | Строка с дробным числом | 3.14 |
float("abc") | Нечисловая строка | ValueError |
int(float("3.14")) | Преобразование в два шага | 3 |
Как безопасно преобразовывать типы в Python
В реальных программах данные часто приходят от пользователей или из файлов. Нельзя рассчитывать, что там всегда окажется корректное число. Если вызвать int() для неправильного ввода, программа упадёт.
В Python есть два безопасных способа справиться с этим. Можно проверить перед преобразованием методами вроде .isdigit(), а можно попробовать и перехватить ошибку с помощью try/except.
Сначала проверка с помощью .isdigit()
Метод .isdigit() возвращает True, если каждый символ строки является цифрой. Это быстрый способ проверить, можно ли безопасно преобразовать строку в целое число.
True False False False False Converted: 42
Безопасное преобразование с помощью try/except
Приём try/except является самым гибким способом обработки преобразований. Вы пробуете выполнить преобразование, а если оно не удаётся, перехватываете ошибку и делаете что-то другое. Подробно try/except мы разберём позже, а пока вот базовый шаблон.
42 100 None None None
Практические упражнения
Пора проверить, как вы освоили преобразование типов. Упражнения начинаются с простых и постепенно усложняются. Попробуйте решить каждое, прежде чем смотреть подсказки.
Есть строковая переменная text со значением "42". Преобразуйте её в целое число и умножьте на 2. Выведите результат.
Ожидаемый вывод:
84Дано дробное число price = 9.99. Преобразуйте его в целое и выведите исходное и преобразованное значения, чтобы показать, что теряется.
Ожидаемый вывод:
Original: 9.99
Converted: 9
Lost: 0.99Подсказка: потерянную часть найдите вычитанием. Примените к ней round(), чтобы избежать странностей чисел с плавающей точкой.
Не запуская код, предскажите, что выведет каждая строка. Запишите свои предположения в комментариях, затем запустите код и проверьте.
Внимательно учтите отбрасывание дробной части, преобразование строк и правила истинности.
Этот код пытается собрать сообщение, но падает с ошибкой TypeError. Исправьте его, чтобы он выводил:
You have 3 new messagesИсправить можно любым способом (str(), f-строки и т. п.).
Напишите код, который проверяет три строки с помощью .isdigit() и преобразует их в целые числа, только если это безопасно. Для каждой строки выведите либо преобразованное число, либо «Not a number».
Дано:
values = ["42", "hello", "100"]Ожидаемый вывод:
42
Not a number
100Итоги: преобразование типов в Python
Всё, что вы узнали о преобразовании типов:
| Функция | Что делает | Пример |
|---|---|---|
int() | Преобразует в целое число (у float отбрасывает дробную часть) | int("42") → 42 |
float() | Преобразует во float | float("3.14") → 3.14 |
str() | Преобразует в строку | str(42) → "42" |
bool() | Преобразует в логическое значение | bool(0) → False |
Главные правила:
bool → int → float)round()float(): int(float("3.14"))Что дальше?
Теперь вы умеете преобразовывать типы данных, а это необходимый навык для обработки пользовательского ввода и создания настоящих программ. В следующем уроке вы научитесь писать чистый и читаемый код на Python, за который вам скажут спасибо другие разработчики (и вы сами в будущем).