Преобразование типов: int(), str(), float()
Преобразование типов: int(), str(), float()
В предыдущих уроках вы узнали, что Python определяет тип данных автоматически. Но что происходит, когда нужно взять строку "42" и прибавить к ней число 8? Или получить текстовое представление числа, чтобы склеить его со строкой? Для этого существует явное преобразование типов — и это один из самых часто используемых приёмов в Python.
Почему нужно преобразование типов
Python строго следит за типами при операциях. Попытка сложить строку с числом вызовет ошибку:
age = "25" # строка
bonus = 5 # число
# print(age + bonus) # TypeError: can only concatenate str (not "int") to str
Python не угадывает, что именно вы имеете в виду — конкатенацию строк или арифметическое сложение. Вы должны явно указать нужный тип.
Функция int()
int() преобразует значение в целое число.
Из строки:
age_str = "25"
age = int(age_str)
print(age + 5) # 30
print(type(age)) # <class 'int'>
Из дробного числа (дробная часть отбрасывается, не округляется):
print(int(3.9)) # 3 (не 4!)
print(int(-3.9)) # -3 (не -4!)
print(int(3.1)) # 3
Из булева значения:
print(int(True)) # 1
print(int(False)) # 0
Что произойдёт при передаче строки с нечисловым содержимым?
# int("привет") # ValueError: invalid literal for int() with base 10: 'привет'
# int("3.14") # ValueError: строка с точкой — не целое число для int()
int() принимает строки, которые выглядят как целые числа: "42", "-7", " 100 " (с пробелами по краям). Строку "3.14" нужно сначала преобразовать через float().
Функция float()
float() преобразует значение в дробное число.
price_str = "99.95"
price = float(price_str)
print(price + 0.05) # 100.0
print(float(42)) # 42.0 — из int
print(float("3.14")) # 3.14 — из строки
print(float(True)) # 1.0
print(float(False)) # 0.0
Специальные значения, которые float() понимает:
print(float("inf")) # inf — бесконечность
print(float("-inf")) # -inf
print(float("nan")) # nan (Not a Number)
Функция str()
str() преобразует значение в строку. Работает с любым типом данных:
age = 25
print("Возраст: " + str(age)) # Возраст: 25
pi = 3.14159
print("π ≈ " + str(pi)) # π ≈ 3.14159
print(str(True)) # 'True'
print(str(None)) # 'None'
print(str(0)) # '0'
Хотя в большинстве случаев для вставки значений в строки удобнее использовать f-строки (f"Возраст: {age}"), str() бывает полезен, когда нужно получить строку для дальнейшей обработки.
Функция bool()
bool() преобразует значение в булев тип. Python считает значения «ложными» (falsy) или «истинными» (truthy):
Ложные значения (falsy):
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False — пустая строка
print(bool(None)) # False
Истинные значения (truthy):
print(bool(1)) # True
print(bool(-5)) # True — любое ненулевое число
print(bool("hi")) # True — непустая строка
print(bool("False")) # True — строка "False" непустая!
Обратите внимание на последний пример: строка "False" — это непустая строка, поэтому bool("False") возвращает True. Это часто удивляет новичков.
Типичные сценарии преобразования
Получить число от пользователя (забегаем вперёд):
# input() всегда возвращает строку — нужно преобразовать
age_input = "18" # допустим, пришло от пользователя
age = int(age_input)
print(f"Через 10 лет вам будет {age + 10} лет")
Сборка строки из разных типов:
count = 42
rate = 0.15
message = "Обработано: " + str(count) + " записей со ставкой " + str(rate)
# Или лучше с f-строкой:
message2 = f"Обработано: {count} записей со ставкой {rate}"
Округление через int():
score = 87.9
grade = int(score) # 87 — просто отбросили дробную часть
# Это не то же самое, что round(87.9) = 88!
Цепочки преобразований
Иногда нужно преобразование через промежуточный тип. Например, строку "3.14" нельзя преобразовать напрямую в int, но можно через float:
s = "3.14"
# int(s) # ValueError!
x = int(float(s)) # 3 — сначала float, потом int
Проверь себя
Что произойдёт при выполнении этого кода?
a = "10"
b = "20"
print(a + b)
print(int(a) + int(b))
Первый print выведет "1020" — конкатенация строк, не сложение чисел. Второй — 30, потому что мы явно преобразовали строки в числа перед сложением. Это один из самых частых источников ошибок при работе с пользовательским вводом.
Итог
int()преобразует в целое число; изfloat— дробная часть отбрасывается (не округляется).float()преобразует в дробное число; работает со строками вроде"3.14".str()преобразует любое значение в строку.bool()преобразует вTrue/Falseпо правилу truthy/falsy:0,"",None,0.0→False; всё остальное →True.- Передача невалидной строки в
int()илиfloat()вызываетValueError— будьте готовы к обработке ошибок. - F-строки (
f"...") — предпочтительная альтернативаstr()при форматировании вывода.
В следующем уроке познакомимся с функцией input(), которая позволяет получать данные от пользователя прямо во время выполнения программы.