Перейти к содержимому
Editor

Преобразование типов в Python: int(), float(), str(), bool()

Начальный20 min5 упр.85 XP

Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе

0/5 упр.

Представьте, что вы спросили человека о возрасте, и он написал ответ на стикере. Теперь у вас есть текст «25», но с надписью на стикере считать не получится. Сначала нужно прочитать текст и в уме превратить его в настоящее число.

Python работает так же. Данные часто приходят в одном типе, а нужны в другом. Пользователь вводит в форму «42», и это строка, а не число. Прежде чем складывать, вычитать или сравнивать это значение, его нужно преобразовать.

В этом уроке вы научитесь уверенно и безопасно преобразовывать типы данных Python. Вы узнаете, какие преобразования происходят автоматически, какие нужно выполнять самостоятельно и как избежать ошибок, на которых спотыкаются новички.

Что такое преобразование типов в Python?

Преобразование типов означает перевод значения из одного типа данных в другой. Например, строку "42" можно превратить в целое число 42, а целое число 10 в float 10.0.

В Python есть два вида преобразования типов. Неявное преобразование происходит автоматически: Python незаметно выполняет его за вас. Явное преобразование вы выполняете сами, с помощью функции вроде int() или str().

Неявное преобразование похоже на автозамену в телефоне, которая сама исправляет слово. Явное преобразование похоже на то, как вы правите слово вручную. Оба способа делают своё дело, но при ручном у вас больше контроля.

Неявное и явное преобразование
# Implicit conversion - Python does it automatically
result = 5 + 2.0
print(result) # 7.0
print(type(result)) # <class 'float'>
# Explicit conversion - you do it with a function
age_text = "25"
age = int(age_text)
print(age + 5) # 30
Вывод
7.0
<class 'float'>
30

Как работает неявное преобразование типов в Python

Когда в арифметическом выражении смешиваются целое число и float, Python автоматически преобразует целое число во float. Это называется неявным преобразованием (или приведением типов). Python всегда приводит значение к более «широкому» типу, чтобы данные не потерялись.

Это как перелить воду из маленькой чашки в большое ведро. Вода (ваши данные) остаётся той же, только живёт теперь в ёмкости побольше. Переход от int к float безопасен, потому что float может хранить любое целое значение.

Примеры неявного преобразования
# int + float → float (automatic)
print(5 + 2.0) # 7.0 (not 7)
print(10 * 1.5) # 15.0
print(8 - 3.0) # 5.0
# bool + int → int (True = 1, False = 0)
print(True + 5) # 6
print(False + 10) # 10
# bool + float → float
print(True + 2.5) # 3.5
Вывод
7.0
15.0
5.0
6
10
3.5
Со строками Python не гадает
# This works - both are numbers
print(5 + 2.0) # 7.0
# This CRASHES - string + int is not allowed
try:
print("5" + 3)
except TypeError as e:
print(f"Error: {e}")
Вывод
7.0
Error: can only concatenate str (not "int") to str

Как преобразовать значение в целое число с помощью int()

Функция int() преобразует значение в целое число. Преобразовывать можно float, строки и логические значения. Каждый тип ведёт себя немного по-своему.

Преобразование float в целое число

При преобразовании float в целое число Python отбрасывает дробную часть: всё после десятичной точки отсекается. Округления не происходит. Это как отрезать верёвку: всё, что свисает дальше отметки, отпадает.

float в int: отбрасывание, а не округление
# int() truncates - it does NOT round
print(int(3.9)) # 3 - not 4!
print(int(3.1)) # 3
print(int(-2.7)) # -2 - truncates toward zero
print(int(99.999)) # 99
# If you want rounding, use round() instead
print(round(3.9)) # 4
print(round(3.1)) # 3
Вывод
3
3
-2
99
4
3

Преобразование строк в целые числа

Строку можно преобразовать в целое число, только если в ней записано корректное целое число. Пробелы вокруг числа допустимы, а вот десятичная точка или буквы вызовут ошибку.

Строки и bool в int
# Valid string-to-int conversions
print(int("42")) # 42
print(int("-7")) # -7
print(int(" 100 ")) # 100 - spaces are stripped
# Booleans to int
print(int(True)) # 1
print(int(False)) # 0
Вывод
42
-7
100
1
0

Как преобразовать значение в float с помощью float()

Функция float() преобразует значение в число с плавающей точкой. Она принимает целые числа, строки и логические значения.

Преобразовать целое число во float всегда безопасно. Ничего не теряется, к числу в конце добавляется .0. Это как дописать к цене нули после запятой: 5 рублей превращаются в 5,00 рубля.

Преобразование во float
# int to float
print(float(42)) # 42.0
print(float(-7)) # -7.0
print(float(0)) # 0.0
# string to float
print(float("3.14")) # 3.14
print(float("7")) # 7.0
print(float("-2.5")) # -2.5
# bool to float
print(float(True)) # 1.0
print(float(False)) # 0.0
Вывод
42.0
-7.0
0.0
3.14
7.0
-2.5
1.0
0.0

Как преобразовать значение в строку с помощью str()

Функция str() превращает любое значение в его строковое представление. Это самая снисходительная функция преобразования: она работает почти со всем.

Чаще всего str() нужна, когда вы собираете сообщение из текста и чисел. Python не позволит склеить строку и число через +, поэтому число сначала превращают в строку.

Преобразование в строку
# Numbers to string
print(str(42)) # "42"
print(str(3.14)) # "3.14"
print(str(-7)) # "-7"
# Booleans to string
print(str(True)) # "True"
print(str(False)) # "False"
# None to string
print(str(None)) # "None"
# Now you can concatenate
age = 25
print("I am " + str(age) + " years old") # I am 25 years old
Вывод
42
3.14
-7
True
False
None
I am 25 years old
str() и конкатенация
name = "Alice"
age = 25
print("Name: " + name + ", Age: " + str(age))
f-строки (чище)
name = "Alice"
age = 25
print(f"Name: {name}, Age: {age}")

Как преобразовать значение в логическое с помощью bool()

Функция bool() превращает значение в True или False. Правило простое: пустые и нулевые значения дают `False`, всё остальное даёт `True`.

Это как спросить: «Здесь что-нибудь есть?» Пустая коробка даёт False. Коробка, в которой что-то лежит, пусть даже скомканный листок бумаги, даёт True.

Истинные и ложные значения при преобразовании
# Falsy values - these all become False
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False - empty string
print(bool(None)) # False
print("---")
# Truthy values - these all become True
print(bool(1)) # True
print(bool(-5)) # True - any non-zero number
print(bool(3.14)) # True
print(bool("hello")) # True - any non-empty string
print(bool(" ")) # True - a space is still a character!
Вывод
False
False
False
False
---
True
True
True
True
True
Каверзные преобразования с bool()
# Tricky cases - don't get fooled!
print(bool("0")) # True - non-empty string
print(bool("False")) # True - non-empty string
print(bool("None")) # True - non-empty string
print(bool(" ")) # True - space is a character
# Only the ACTUAL empty string is falsy
print(bool("")) # False
Вывод
True
True
True
True
False

Частые ошибки преобразования типов в Python

Не всякое преобразование возможно. Когда Python не может преобразовать значение, он выбрасывает ValueError. Это самая частая ошибка, с которой новички сталкиваются при преобразовании типов.

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

Типичные примеры ValueError
# These conversions CRASH with ValueError
# Can't convert words to numbers
try:
print(int("hello"))
except ValueError as e:
print(f"Error 1: {e}")
# int() can't handle decimal strings
try:
print(int("3.14"))
except ValueError as e:
print(f"Error 2: {e}")
# float() can't handle words either
try:
print(float("abc"))
except ValueError as e:
print(f"Error 3: {e}")
Вывод
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, если каждый символ строки является цифрой. Это быстрый способ проверить, можно ли безопасно преобразовать строку в целое число.

Безопасное преобразование с .isdigit()
# .isdigit() checks if a string contains only digits
print("42".isdigit()) # True
print("3.14".isdigit()) # False - has a dot
print("-7".isdigit()) # False - has a minus sign
print("hello".isdigit()) # False
print("".isdigit()) # False - empty string
# Safe conversion pattern
user_input = "42"
if user_input.isdigit():
number = int(user_input)
print(f"Converted: {number}")
else:
print(f"Cannot convert: {user_input}")
Вывод
True
False
False
False
False
Converted: 42

Безопасное преобразование с помощью try/except

Приём try/except является самым гибким способом обработки преобразований. Вы пробуете выполнить преобразование, а если оно не удаётся, перехватываете ошибку и делаете что-то другое. Подробно try/except мы разберём позже, а пока вот базовый шаблон.

Безопасное преобразование с try/except
# try/except - the safest approach
def safe_int(value):
try:
return int(value)
except ValueError:
return None
# Works with valid input
print(safe_int("42")) # 42
print(safe_int("100")) # 100
# Returns None for bad input instead of crashing
print(safe_int("hello")) # None
print(safe_int("3.14")) # None
print(safe_int("")) # None
Вывод
42
100
None
None
None

Практические упражнения

Пора проверить, как вы освоили преобразование типов. Упражнения начинаются с простых и постепенно усложняются. Попробуйте решить каждое, прежде чем смотреть подсказки.

Упражнение 1: строку в int и умножить
Напишите код

Есть строковая переменная text со значением "42". Преобразуйте её в целое число и умножьте на 2. Выведите результат.

Ожидаемый вывод:

84
text = "42"
# Convert text to an integer and multiply by 2
# Print the result
Упражнение 2: float в int (что теряется?)
Напишите код

Дано дробное число price = 9.99. Преобразуйте его в целое и выведите исходное и преобразованное значения, чтобы показать, что теряется.

Ожидаемый вывод:

Original: 9.99
Converted: 9
Lost: 0.99

Подсказка: потерянную часть найдите вычитанием. Примените к ней round(), чтобы избежать странностей чисел с плавающей точкой.

price = 9.99
# Convert to int
# Calculate what was lost
# Print all three values
Упражнение 3: предскажите вывод (преобразование типов)
Угадайте вывод

Не запуская код, предскажите, что выведет каждая строка. Запишите свои предположения в комментариях, затем запустите код и проверьте.

Внимательно учтите отбрасывание дробной части, преобразование строк и правила истинности.

print(int(3.9)) # Your prediction:
print(float("7")) # Your prediction:
print(str(True)) # Your prediction:
print(bool(0)) # Your prediction:
Упражнение 4: исправьте склейку строки и int
Исправьте ошибку

Этот код пытается собрать сообщение, но падает с ошибкой TypeError. Исправьте его, чтобы он выводил:

You have 3 new messages

Исправить можно любым способом (str(), f-строки и т. п.).

count = 3
message = "You have " + count + " new messages"
print(message)
Упражнение 5: безопасный конвертер чисел
Напишите код

Напишите код, который проверяет три строки с помощью .isdigit() и преобразует их в целые числа, только если это безопасно. Для каждой строки выведите либо преобразованное число, либо «Not a number».

Дано:

values = ["42", "hello", "100"]

Ожидаемый вывод:

42
Not a number
100
values = ["42", "hello", "100"]
# Loop through values
# If the value is a digit, convert and print the integer
# Otherwise print "Not a number"

Итоги: преобразование типов в Python

Всё, что вы узнали о преобразовании типов:

ФункцияЧто делаетПример
int()Преобразует в целое число (у float отбрасывает дробную часть)int("42") → 42
float()Преобразует во floatfloat("3.14") → 3.14
str()Преобразует в строкуstr(42) → "42"
bool()Преобразует в логическое значениеbool(0) → False

Главные правила:

  • Неявное преобразование происходит только между числовыми типами (bool → int → float)
  • `int()` отбрасывает дробную часть, а не округляет. Для округления используйте round()
  • `int("3.14")` падает с ошибкой, поэтому сначала пройдите через float(): int(float("3.14"))
  • Пустые и нулевые значения ложны, всё остальное истинно
  • Используйте `.isdigit()` или `try/except`, чтобы преобразовывать безопасно
  • Что дальше?

    Теперь вы умеете преобразовывать типы данных, а это необходимый навык для обработки пользовательского ввода и создания настоящих программ. В следующем уроке вы научитесь писать чистый и читаемый код на Python, за который вам скажут спасибо другие разработчики (и вы сами в будущем).

    Похожие уроки

    Урок был полезен?