Преобразование типов: 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.0False; всё остальное → True.
  • Передача невалидной строки в int() или float() вызывает ValueError — будьте готовы к обработке ошибок.
  • F-строки (f"...") — предпочтительная альтернатива str() при форматировании вывода.

В следующем уроке познакомимся с функцией input(), которая позволяет получать данные от пользователя прямо во время выполнения программы.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике