Как преобразовать строку в целое число в Python
Все типы данных в Python, включая целые числа и строки, являются объектами. Часто при написании кода Python вам необходимо преобразовать один тип данных в другой. Например, чтобы выполнить математическую операцию с числом, представленным в виде строки, его необходимо преобразовать в целое число.
В этой статье мы покажем вам, как преобразовать строку Python в целое число.
Функция Python int()
Встроенная функция int() возвращает десятичный целочисленный объект из заданного числа или строки. Он имеет следующий вид:
Функция принимает два аргумента:
- x — строка или число, которое нужно преобразовать в целое число.
- base — представляет собой систему счисления первого аргумента. Его значение может быть 0 и 2–36. Это необязательный аргумент. Если база не указана, по умолчанию используется 10 (десятичное целое число).
Обычно целые числа выражаются в шестнадцатеричной (основание 16), десятичной (основание 10), восьмеричной (основание 8) или двоичной (основание 2) нотации.
Если данная строка не может быть представлена как целое число, функция вызовет исключение ValueError .
Преобразование строки Python в целое число
В Python «строка» — это список символов, который объявляется с использованием одинарных ( ‘ ), двойных ( » ) или тройных кавычек ( «»» ).
Если переменная, содержащая только числа, объявляется с использованием кавычек, ее тип данных устанавливается на String. Рассмотрим следующий пример:
Функция type() показывает нам, что переменная days является объектом String .
Попробуем произвести математическую операцию с переменной:
Python TypeError исключения TypeError потому что он не может выполнить вычисление сложения со строкой и целым числом:
Traceback (most recent call last): File "", line 1, in TypeError: cannot concatenate 'str' and 'int' objects
Чтобы преобразовать строковое представление десятичного целого числа в int , передайте строку в функцию int() , которая возвращает десятичное целое число:
days = "23"
days_int = int(days)
type(days_int)
Если вы сейчас попытаетесь выполнить вычисления, операция суммирования будет выполнена успешно:
Если число включает запятые, отмеченные тысячами, миллионами и т. Д., Вам необходимо удалить запятые перед передачей числа в функцию int() :
total = "1,000,000"
int(total.replace(",", ""))
При преобразовании строк, представляющих целые числа в разных системах счисления, убедитесь, что вы используете правильное base .
Например, в шестнадцатеричной системе число 54732 представлено как D5CF . Чтобы преобразовать его в десятичное целое, вам нужно использовать основание 16:
Если вы D5CF строку D5CF в функцию int() без установки базы, она выдаст исключение ValueError :
Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: 'D5CF'
Выводы
В Python вы можете преобразовать строку в целое число с помощью функции int() .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Функция int
В языке программирования Python встроенная функция int() возвращает целое число (экземпляр класса int ) в десятичной системе счисления. Если преобразовать переданный в функцию первый или единственный аргумент в десятичное число не удается, то генерируется исключение ValueError .
Если вызвать функцию int() без аргументов, она вернет 0.
Чаще всего функции int() передают один аргумент, который может быть либо строкой, либо числом. Строки должны быть символьными представлениями целого числа, иначе будет выброшено исключение.
>>> int('4') 4 >>> int('3a') Traceback (most recent call last): File "", line 1, in int('3a') ValueError: invalid literal for int() with base 10: '3a'
Если передать функции целое число, то она вернет его же. Если передать вещественное число, то оно будет округлено до целого в сторону нуля (т. е. дробная часть будет отброшена).
>>> int(87) 87 >>> int(-103) -103 >>> int(234.879) 234 >>> int(-0.3) 0 >>> int(-0.9) 0
Попытка преобразовать строку, содержащую вещественное число, в целое число с помощью функции int() вызывает ошибку.
>>> int('101.1') Traceback (most recent call last): File "", line 1, in int('101.1') ValueError: invalid literal for int() with base 10: '101.1'
Чтобы преобразовать дробное число в строковом представлении в целое число, сначала можно использовать функцию float() , затем int() .
В случае, когда указывается второй аргумент для функции int() , первый всегда должен быть строкой. С помощью второго аргумента сообщается, в какой системе счисления находится число, указанное в строке первого аргумента. Функция int() возвращает его значение в десятичной системе счисления.
>>> int('12', 8) 10 >>> int('13h', 20) 477 >>> int('111001', 2) 57
Основание системы счисления не должно превышать 36.
>>> int('w0y', 36) 41506 >>> int('w0y', 37) Traceback (most recent call last): File "", line 1, in ValueError: int() base must be >= 2 and
Для двоичной, восьмеричной и шестнадцатеричной систем счисления можно использовать префиксы. Если такое представление числа заключается в кавычки, то второй аргумент обязателен.
>>> int(0b11) 3 >>> int(0o10) 8 >>> int(0xA5) 165 >>> int('0b11') Traceback (most recent call last): File "", line 1, in int('0b11') ValueError: invalid literal for int() with base 10: '0b11' >>> int('0b11', 2) 3
В классах функцию int() переопределяют методы __int__() , __index__() , __trunc__() .
>>> class A: . a = 'H' . def __int__(self): . return ord(self.a) . >>> obj = A() >>> int(obj) 72 >>> obj.a = '!' >>> int(obj) 33
Python функция int от строки
Здесь Python понимает, что вы хотите сохранить целое число 110 в виде строки или используете целочисленный тип данных:
Важно учитывать, что конкретно подразумевается под "110" и 110 в приведённых выше примерах. Для человека, который использовал десятичную систему счисления всю жизнь очевидно, что речь идёт о числе сто десять. Однако другие системы счисления, такие, как двоичная и шестнадцатеричная, используют иные основания для представления целого числа.
Например, вы представляете число сто десять в двоичном и шестнадцатеричном виде как 1101110 и 6e соответственно.
А также записываете целые числа в других системах счисления в Python с помощью типов данных str и int:
>>> binary = 0b1010 >>> hexadecimal = "0xa"
Обратите внимание, что binary и hexadecimal используют префиксы для идентификации системы счисления. Все целочисленные префиксы имеют вид 0? , где ? заменяется символом, который относится к системе счисления:
- b: двоичная (основание 2);
- o: восьмеричная (основание 8);
- d: десятичная (основание 10);
- x: шестнадцатеричная (основание 16).
Техническая подробность: префикс не требуется ни в int , ни в строковом представлении, когда он определён логически.
int предполагает, что целочисленный литерал – десятичный:
>>> decimal = 303 >>> hexadecimal_with_prefix = 0x12F >>> hexadecimal_no_prefix = 12F File "", line 1 hexadecimal_no_prefix = 12F ^ SyntaxError: invalid syntax
У строкового представления целого числа больше гибкости, потому что строка содержит произвольные текстовые данные:
>>> decimal = "303" >>> hexadecimal_with_prefix = "0x12F" >>> hexadecimal_no_prefix = "12F"
Каждая из этих строк представляет одно и то же целое число.
Теперь, когда мы разобрались с базовым представлением целых чисел с помощью str и int , вы узнаете, как преобразовать Python строку в int .
Преобразование строки Python в int
Если вы записали десятичное целое число в виде строки и хотите преобразовать строку Python в int , то передайте строку в метод int() , который возвращает десятичное целое число:
По умолчанию int() предполагает, что строковый аргумент представляет собой десятичное целое число. Однако если вы передадите шестнадцатеричную строку в int() , то увидите ValueError :
>>> int("0x12F") Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: '0x12F'
Сообщение об ошибке говорит, что строка – недопустимое десятичное целое число.
Важно понимать разницу между двумя типами неудачных результатов при передаче строки в int() :
- Синтаксическая ошибка ValueError возникает, когда int() не знает, как интерпретировать строку с использованием предоставленного основания (10 по умолчанию).
- Логическая ошибка int() интерпретирует строку, но не так, как то ожидалось.
Вот пример логической ошибки:
>>> binary = "11010010" >>> int(binary) # Using the default base of 10, instead of 2 11010010
В этом примере вы подразумевали, что результатом будет 210 – десятичное представление двоичной строки. К сожалению, поскольку точное поведение не было указано, int() предположил, что строка – десятичное целое число.
Гарантия нужного поведения – постоянно определять строковые представления с использованием явных оснований:
>>> int("0b11010010") Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: '0b11010010'
Здесь получаете ValueError , потому что int() не способен интерпретировать двоичную строку как десятичное целое число.
Когда передаёте строку int() , указывайте систему счисления, которую используете для представления целого числа. Чтобы задать систему счисления применяется base :
Теперь int() понимает, что вы передаёте шестнадцатеричную строку и ожидаете десятичное целое число.
Техническая подробность: аргумент base не ограничивается 2, 8, 10 и 16:
Отлично! Теперь, когда тонкости преобразования строки Python в int освоены, вы научитесь выполнять обратную операцию.
Преобразование Python int в строку
Для преобразования int в строку Python разработчик использует str() :
По умолчанию str() ведёт себя, как int() : приводит результат к десятичному представлению:
В этом примере str() блеснул "умом": интерпретировал двоичный литерал и преобразовал его в десятичную строку.
Если вы хотите, чтобы строка представляла целое число в другой системе счисления, то используйте форматированную строку (f-строку в Python 3.6+) и параметр, который задаёт основание:
>>> octal = 0o1073 >>> f"" # Decimal '571' >>> f"" # Hexadecimal '23b' >>> f"" # Binary '1000111011'
str – гибкий способ представления целого числа в различных системах счисления.
Заключение
Поздравляем! Вы достаточно много узнали о целых числах и о том, как представлять и преобразовывать их с помощью типов данных Python.
- Как использовать str и int для хранения целых чисел.
- Как указать явную систему счисления для целочисленного представления.
- Как преобразовать строку Python в int .
- Как преобразовать Python int в строку.
Теперь, когда вы усвоили материал о str и int , читайте больше о представлении числовых типов с использованием float(), hex(), oct() и bin()!