Преобразование строковых данных в целые числа на Python
Преобразование строки в целое число - одна из базовых операций в Python. Чаще всего для этого используется встроенная функция int(). Однако есть нюансы, которые нужно учитывать.
Основные способы преобразования
Основной способ преобразования строки в целое число в Python - вызов функции int() с передачей строки в качестве аргумента. Функция автоматически обрабатывает ведущие и замыкающие пробелы, а также знаки плюс и минус. Пример:
int('123')изменить тип в python (изменить тип в python)
123
Python int to str (преобразование int в строку в python)
int(' -42 ')Python bytes to string (преобразование байтов в строку в python)
-42
как выводить в строку python (преобразование вывода в строку в python)
Важно: строка должна содержать только цифры, необязательные пробелы в начале/конце и необязательный знак. Любые другие символы (буквы, точки, запятые) приводят к ошибке ValueError. Пустая строка также вызывает ошибку.
Как преобразовать строку, представляющую число в двоичной, восьмеричной или шестнадцатеричной системе?
Второй аргумент int() задаёт основание системы счисления (от 2 до 36). Примеры:
int('1010', 2)Python list to string (преобразование списка в строку python)
10
Python string integer (преобразование строки в целое число python)
int('0xFF', 16)преобразовать тип данных python (преобразование типа данных в python)
255
Python целое в строку (преобразование целого числа в строку)
Для шестнадцатеричных чисел можно опустить префикс 0x, если указано основание 16. При base=0 функция определяет систему по префиксу: 0b - двоичная, 0o - восьмеричная, 0x - шестнадцатеричная, иначе десятичная.
Ошибки: Если в строке встречается символ, недопустимый для данной системы (например, '2' в двоичной), возникает ValueError.
Как безопасно преобразовать строку, избежав прерывания программы при ошибке?
Оборачивание вызова int() в блок try и except ValueError позволяет обработать некорректный ввод. Пример:
s = 'abc'
try:
num = int(s)
except ValueError:
print('Невозможно преобразовать строку в число')Python string number (строковое представление числа в python)
Невозможно преобразовать строку в число
функция str в python (функция str() в python)
Такой подход применяется при работе с пользовательским вводом, чтении файлов или парсинге данных, где заранее неизвестна корректность строк.
Распространённая ошибка: Использование isdigit() для проверки не учитывает знак минус и пробелы, поэтому может отклонить корректные строки, например '-7'. Рекомендуется полагаться на try/except как на более надёжный способ.
Как преобразовать строку с дробной частью, например '3.14'?
Прямая передача такой строки в int() вызовет ValueError. Необходимо сначала преобразовать её в число с плавающей точкой, затем отбросить дробную часть:
int(float('3.14'))Python список str в int (преобразование списка строк в список целых чисел в python)
3
Python перевести в число (преобразование в число в python)
Такой приём используется, когда требуется целая часть числа, например, при обработке цен или размеров. Важно: из-за представления float может возникнуть потеря точности для больших чисел. Для точных вычислений с десятичными числами лучше использовать Decimal из модуля decimal.
Проблема: Если строка содержит нецифровые символы, кроме точки, например '3.14abc', float() также вызовет ValueError. Требуется предварительная очистка.
Как преобразовать строку с разделителями тысяч, например '1,234'?
Запятые можно удалить методом replace() перед вызовом int():
int('1,234'.replace(',', ''))дробное число в целое python (преобразование дробного числа в целое в python)
1234
Python число в строку (преобразование числа в строку в python)
Аналогично удаляются пробелы, точки (в некоторых локалях), символы валюты. При работе с разными форматами чисел (европейский, американский) необходимо предварительно нормализовать строку.
Типичная ошибка: Удаление запятых может привести к неверному значению, если запятая используется как десятичный разделитель. В таких случаях требуется замена запятой на точку и последующее преобразование через float.
Как преобразовать список строк в список целых чисел?
Для массового преобразования удобно использовать функцию map() или генератор списка:
strings = ['10', '20', '30']
numbers = list(map(int, strings))
print(numbers)Python привести к int (преобразование в целое число int в python)
[10, 20, 30]
Python элемент списка в строку (преобразование элемента списка в строку в python)
Либо:
numbers = [int(s) for s in strings]
[10, 20, 30]
Если в списке есть некорректные строки, необходимо добавить обработку ошибок, например, с помощью try/except внутри генератора.
Проблема: map() не отфильтровывает ошибки. При наличии некорректных строк программа прервётся. Альтернатива - написать вспомогательную функцию с обработкой и использовать её в map.
Общие типичные ошибки при преобразовании строки в int:
- ValueError: если строка пустая, содержит недопустимые символы (буквы, точки, запятые без предварительной обработки).
- TypeError: если аргумент не является строкой (например, передан список или число).
- UnicodeEncodeError в старых версиях при использовании не ASCII цифр (например, арабских). Современные версии Python поддерживают цифры из других письменностей.
Расширенные примеры и приёмы
Пример 1. Автоопределение системы счисления
С помощью base=0 функция int() определяет основание по префиксу строки:
print(int('0b1101', 0))
print(int('0o77', 0))
print(int('0x1A', 0))
13 63 26
Пример 2. Извлечение целого числа из строки с текстом
Удаление всех нецифровых символов, кроме начального минуса, с помощью регулярного выражения:
import re
def extract_int(text):
cleaned = re.sub(r'[^\d-]', '', text)
# удаляем лишние минусы (оставляем первый, если есть)
parts = cleaned.split('-')
if parts[0] == '' and len(parts) > 1:
# строка начиналась с минуса
cleaned = '-' + ''.join(parts[1:])
else:
cleaned = ''.join(parts)
return int(cleaned) if cleaned else None
print(extract_int('Цена: -123 руб. №45'))
-12345
Пример 3. Извлечение нескольких чисел из строки с помощью регулярных выражений
import re
text = 'Температура: -5, скорость 10 м/с, высота 300'
numbers = [int(x) for x in re.findall(r'-?\d+', text)]
print(numbers)
[-5, 10, 300]
Пример 4. Цикл с повторным вводом до корректного целого числа
def get_int(prompt):
while True:
s = input(prompt)
try:
return int(s)
except ValueError:
print('Некорректный ввод. Попробуйте снова.')
# Пример использования (в консоли):
# age = get_int('Введите возраст: ')
# print('Возраст:', age)
Результат зависит от ввода пользователя.
Пример 5. Преобразование строки с пробелами как разделителями тысяч
s = '1 234 567 890'
# удаляем все пробелы
num = int(s.replace(' ', ''))
print(num)
1234567890
Пример 6. Преобразование строки с символом валюты
s = '$500'
num = int(s.replace('$', '').strip())
print(num)
500
Пример 7. Использование map с функцией, обрабатывающей ошибки
def safe_int(s):
try:
return int(s)
except ValueError:
return None
strings = ['10', 'abc', '20', '', '30']
numbers = list(filter(None, map(safe_int, strings)))
print(numbers)
[10, 20, 30]
Пример 8. Преобразование строки с большой точностью через Decimal
from decimal import Decimal
s = '123456789012345678901234567890'
num = int(Decimal(s))
print(num)
123456789012345678901234567890