Преобразование данных в числовой формат в Python
Приведение данных к числовым типам в Python
Основной способ: встроенные функции int(), float() и complex()
Для преобразования значения в целое число используется int(x), для числа с плавающей точкой - float(x), для комплексного - complex(x). Эти функции принимают один аргумент (число, строку или другой объект) и возвращают соответствующий числовой тип. Если преобразование невозможно, возникает исключение ValueError.
# Целое число из строки
print(int('42')) # 42
# Число с плавающей точкой из строки
print(float('3.14')) # 3.14
# Комплексное число из строки
print(complex('1+2j')) # (1+2j)вывод float python (вывод числа float в python)
Типичные проблемы:
- Попытка преобразовать строку с дробной точкой через int() - ValueError.
- Пробелы в начале/конце строки - int() и float() игнорируют их, но если пробелы внутри, возникает ошибка.
- Логические значения True/False преобразуются в 1 и 0 соответственно.
Как преобразовать строку с десятичным числом в целое?
Если нужно получить целую часть числа, представленного строкой с дробной частью, сначала применяют float(), затем int().
s = '3.14'
result = int(float(s))
print(result) # 3Tuple в dict python (преобразование кортежа в словарь в python)
Ошибка: если строка содержит буквы или нечисловые символы, float() вызовет ValueError.
Как преобразовать строку с указанием системы счисления?
Функция int() принимает второй необязательный аргумент base (основание от 2 до 36). Строка может содержать префикс (0b, 0o, 0x).
print(int('1010', 2)) # 10
print(int('0b1010', 0)) # 10 (base=0 определяет основание по префиксу)
print(int('FF', 16)) # 255
Python привести к числу (приведение к числовому типу в python)
Ошибка: если строка не соответствует указанному основанию - ValueError.
Как безопасно преобразовать строку с обработкой ошибок?
Для надёжного преобразования используют конструкцию try/except, перехватывая ValueError.
def safe_int(s):
try:
return int(s)
except ValueError:
return None
print(safe_int('123')) # 123
print(safe_int('abc')) # NoneПримечание: такой подход не различает разные типы ошибок, но достаточно для большинства случаев.
Как преобразовать логическое значение в число?
Python позволяет напрямую привести bool к int: True → 1, False → 0.
print(int(True)) # 1
print(int(False)) # 0Также можно использовать в арифметических операциях: True + 1 даст 2.
Ошибки нет, но следует помнить, что булевы значения являются подклассом int.
Как преобразовать число с плавающей точкой в целое с округлением?
Простое отбрасывание дробной части (int(3.9) → 3) не всегда подходит. Для математического округления используют round(), math.floor(), math.ceil().
import math
print(int(3.9)) # 3 (отбрасывание)
print(round(3.9)) # 4
print(math.floor(3.9)) # 3
print(math.ceil(3.9)) # 4Особенность: round() использует банковское округление (to nearest even) для равных расстояний.
Как преобразовать список строк в список чисел?
Применяют функцию map() или генератор списка.
str_list = ['1', '2', '3']
int_list = list(map(int, str_list))
print(int_list) # [1, 2, 3]
# С дробными числами
float_list = [float(x) for x in ['1.5', '2.7', '3.0']]
print(float_list) # [1.5, 2.7, 3.0]Проблема: если в списке есть некорректные строки, map вызовет ошибку. Лучше использовать try внутри генератора.
Как преобразовать в комплексное число?
Функция complex() принимает два аргумента (действительную и мнимую части) или одну строку.
print(complex(3, 4)) # (3+4j)
print(complex('5+6j')) # (5+6j)
print(complex('3+4j')) # (3+4j)Ошибка: строка должна быть без пробелов и в формате 'a+bj' или 'a-bj'.
Как использовать Decimal для точного преобразования?
Если важна точность десятичных дробей, применяют Decimal из модуля decimal.
from decimal import Decimal, InvalidOperation
try:
d = Decimal('0.1') + Decimal('0.2')
print(d) # 0.3
print(float(d)) # 0.3
except InvalidOperation:
print('Некорректная строка')Особенность: Decimal чувствителен к количеству знаков и может потребовать настройки контекста.
Примеры приведения к числовым типам
Преобразование строкового представления числа
# Шестнадцатеричная строка
s = '1a'
result = int(s, 16)
print(result) # 2626
# Двоичная строка с префиксом
s = '0b1101'
result = int(s, 0)
print(result) # 1313
Преобразование числа с плавающей точкой в целое
val = 7.999
print(int(val)) # 7
print(round(val)) # 8
print(int(val + 0.5)) # 8 (простое округление)7 8 8
Преобразование логических и None значений
print(int(None)) # Ошибка TypeErrorTypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
# Использование or для замещения
x = None
val = int(x) if x is not None else 0
print(val) # 00
Преобразование списка с обработкой ошибок
strings = ['123', 'abc', '45.6', '78']
numbers = []
for s in strings:
try:
numbers.append(int(float(s)))
except (ValueError, TypeError):
numbers.append(None)
print(numbers) # [123, None, 45, 78] (обратите внимание: 45.6 -> int(float()) = 45)[123, None, 45, 78]
Преобразование из bytes
b = b'255'
print(int(b)) # 255
print(float(b)) # 255.0
# Двоичные данные
b2 = b'0b1111'
print(int(b2, 0)) # 15255 255.0 15
Преобразование с помощью fractions.Fraction
from fractions import Fraction
frac = Fraction('3/4')
print(float(frac)) # 0.75
print(int(frac)) # 0 (отбрасывание дробной части)0.75 0
Преобразование с помощью decimal.Decimal с округлением
from decimal import Decimal, ROUND_HALF_UP
d = Decimal('2.675')
d_rounded = d.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
print(d_rounded) # 2.68 (в отличие от float round: 2.67)2.68
Работа с комплексными числами из двух компонентов
real_part = 3
imag_part = -2
c = complex(real_part, imag_part)
print(c) # (3-2j)
print(c.real) # 3.0
print(c.imag) # -2.0
print(int(c.real)) # 3(3-2j) 3.0 -2.0 3
Преобразование строки с пробелами и знаками
s = ' -456 '
print(int(s)) # -456 (пробелы игнорируются, знак распознаётся)
s2 = ' +3.14 '
print(float(s2)) # 3.14-456 3.14
# Пробел внутри числа недопустим
s3 = '12 34'
try:
print(int(s3))
except ValueError as e:
print('Ошибка:', e)Ошибка: invalid literal for int() with base 10: '12 34'
Приведение к числу для пользовательского ввода
user_input = input('Введите число: ')
try:
number = float(user_input)
except ValueError:
print('Неверный ввод')
else:
print('Введено число:', number)(Пример: ввод '10.5' -> 10.5; ввод 'abc' -> Неверный ввод)