kapo4ka 04 октября 2019
9862

Как быстро и просто преобразовать тип String в Integer на Python

Работаете с целыми числами на Python? Держите универсальные способы хранения таких чисел, а также подробности преобразования String в Integer и наоборот.

Integer целые числа. Другими словами — числа, у которых нет дробной составляющей. Для хранения целого числа программист Python использует два типа данных: int и str. Каждый из них предоставляет гибкость при работе с целыми числами при различных обстоятельствах. Из этой Python статьи вы узнаете, как преобразовать строку в int, а также научитесь конвертировать int в строку.

К концу прочтения вы поймёте:

  1. Как хранить целые числа, используя str и int.
  2. Как преобразовать Python string в int.
  3. Как конвертировать Python int в строку.

Начнём!

Представление целых чисел в Python

Целое число сохраняют с использованием разных типов. Язык программирования Python предлагает два возможных типа данных для представления целого числа:

  1. str
  2. int

Например, вы записываете целое число, используя строковый литерал:

            >>> s = "110" 
        

Здесь Python понимает, что вы хотите сохранить целое число 110 в виде строки или используете целочисленный тип данных:

            >>> i = 110 
        

Важно учитывать, что конкретно подразумевается под "110" и 110 в приведённых выше примерах. Для человека, который использовал десятичную систему счисления всю жизнь очевидно, что речь идёт о числе сто десять. Однако другие системы счисления, такие, как двоичная и шестнадцатеричная, используют иные основания для представления целого числа.

Например, вы представляете число сто десять в двоичном и шестнадцатеричном виде как 1101110 и 6e соответственно.

А также записываете целые числа в других системах счисления в Python с помощью типов данных str и int:

            >>> binary = 0b1010
>>> hexadecimal = "0xa" 
        

Обратите внимание, что binary и hexadecimal используют префиксы для идентификации системы счисления. Все целочисленные префиксы имеют вид 0?, где ? заменяется символом, который относится к системе счисления:

  1. b: двоичная (основание 2); 
  2. o: восьмеричная (основание 8); 
  3. d: десятичная (основание 10); 
  4. x: шестнадцатеричная (основание 16). 

Техническая подробность: префикс не требуется ни в int, ни в строковом представлении, когда он определён логически.

int предполагает, что целочисленный литерал – десятичный:

            >>> decimal = 303
>>> hexadecimal_with_prefix = 0x12F
>>> hexadecimal_no_prefix = 12F
  File "<stdin>", 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("10")
10
>>> type(int("10"))
<class 'int'> 
        

По умолчанию int() предполагает, что строковый аргумент представляет собой десятичное целое число. Однако если вы передадите шестнадцатеричную строку в int(), то увидите ValueError:

            >>> int("0x12F")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0x12F' 
        

Сообщение об ошибке говорит, что строка – недопустимое десятичное целое число.

Примечание:

Важно понимать разницу между двумя типами неудачных результатов при передаче строки в int():

  1. Синтаксическая ошибка ValueError возникает, когда int() не знает, как интерпретировать строку с использованием предоставленного основания (10 по умолчанию). 
  2. Логическая ошибка 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 "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0b11010010' 
        

Здесь получаете ValueError, потому что int() не способен интерпретировать двоичную строку как десятичное целое число.

Когда передаёте строку int(), указывайте систему счисления, которую используете для представления целого числа. Чтобы задать систему счисления применяется base:

            >>> int("0x12F", base=16)
303 
        

Теперь int() понимает, что вы передаёте шестнадцатеричную строку и ожидаете десятичное целое число.

Техническая подробность: аргумент base не ограничивается 2, 8, 10 и 16:

            >>> int("10", base=3)
3 
        

Отлично! Теперь, когда тонкости преобразования строки Python в int освоены, вы научитесь выполнять обратную операцию.

Преобразование Python int в строку

Для преобразования int в строку Python разработчик использует str():

            >>> str(10)
'10'
>>> type(str(10))
<class 'str'> 
        

По умолчанию str() ведёт себя, как int(): приводит результат к десятичному представлению:

            >>> str(0b11010010)
'210' 
        

В этом примере str() блеснул "умом": интерпретировал двоичный литерал и преобразовал его в десятичную строку.

Если вы хотите, чтобы строка представляла целое число в другой системе счисления, то используйте форматированную строку (f-строку в Python 3.6+) и параметр, который задаёт основание:

            >>> octal = 0o1073
>>> f"{octal}"  # Decimal
'571'
>>> f"{octal:x}"  # Hexadecimal
'23b'
>>> f"{octal:b}"  # Binary
'1000111011' 
        

str – гибкий способ представления целого числа в различных системах счисления.

Заключение

Поздравляем! Вы достаточно много узнали о целых числах и о том, как представлять и преобразовывать их с помощью типов данных Python.

В этом уроке мы изучили:

  1. Как использовать str и int для хранения целых чисел.
  2. Как указать явную систему счисления для целочисленного представления.
  3. Как преобразовать строку Python в int.
  4. Как преобразовать Python int в строку.

Теперь, когда вы усвоили материал оstr и int, читайте больше о представлении числовых типов с использованием float(), hex(), oct() и bin()!

С каким преобразованием на Python вы сталкиваетесь чаще: str в int или наоборот?

РУБРИКИ В СТАТЬЕ

Комментарии

BUG
LIVE