freeCodeCamp/guide/russian/python/data-structures/integers/index.md

6.6 KiB
Raw Blame History

title localeTitle
Python Integers Цепочки Python

Теоретическая область для целых чисел в python является отрицательной бесконечностью до бесконечности. На практике целочисленные значения ограничены объемом доступной памяти.

В Python 2 существует различие между int , числами, которые соответствуют 32 или 64-битным C длинным и long номерам, ограниченным доступной памятью. Python 3 объединил два типа в int , больше информации в PEP 237 .

создание int с использованием целочисленных литералов

Целочисленные литеры

Целочисленные объекты могут быть созданы с использованием целочисленных литералов. Безсердечные числа без десятичных знаков являются целыми литералами:

>>> 1234567890           # Unadorned numbers are integer literals 
 1234567890 
 >>> type(1234567890) 
 <class 'int'> 

Числовые литералы не содержат знак, однако создания отрицательных целых объектов можно предваряя с одноместный - (минус) оператором без пробела перед буквальным:

>>> -1234567890 
 -1234567890 
 >>> type(-1234567890) 
 <class 'int'> 

Аналогично, положительные целые объекты могут быть созданы путем префикса унарного + (плюс) оператора без пробела перед цифрами. Обычно + омрачивается:

>>> +1234 
 1234 

Бинарные (base 2, prefix: 0b или 0B ), восьмеричные (base 8, prefix: 0o или 0O ) и шестнадцатеричные (базовые 16, префикс: 0x или 0X ) целые числа также могут быть созданы с использованием целочисленных литералов:

>>> 0b1, 0b10, 0b11 
 (1, 2, 3) 
 >>> 0o1, 0o10, 0o11 
 (1, 8, 9) 
 >>> 0x1, 0x10, 0x11 
 (1, 16, 17) 

Обратите внимание, что ведущие 0 для ненулевых целых литералов не допускаются :

>>> 0     # Zero by itself is okay. 
 0 
 >>> 01    # Leading zero(s) cause SyntaxError. 
  File "<stdin>", line 1 
    01 
     ^ 
 SyntaxError: invalid token 

int конструктор еще один способ создать целые объекты.

class int(x=0) 
 class int(x, base=10) 

При необходимости предпочтительнее создавать целые объекты с целыми литералами:

>>> a = 1         # Prefer integer literal when possible. 
 >>> type(a) 
 <class 'int'> 
 >>> b = int(1)    # Works but unnecessary. 
 >>> type(b) 
 <class 'int'> 

Однако конструктор позволяет создавать целые объекты из других типов номеров:

>>> a = 1.123 
 >>> type(a) 
 <class 'float'> 
 >>> print(a) 
 1.123 
 >>> b = int(1.123) 
 >>> type(b) 
 <class 'int'> 
 >>> print(b) 
 1 

Использование конструктора int для чисел с плавающей запятой усекает число до нуля:

>>> int(-1.23) 
 -1 
 >>> int(1.23) 
 1 

Встроенные boolean константы являются экземплярами класса bool и являются подклассами класса int , что делает их своего рода числовым типом:

>>> type(True) 
 <class 'bool'> 
 >>> issubclass(bool, int) 
 True 

Если это не имеет смысла для вас, не беспокойтесь. Теперь просто помните, что вызов конструктора int с boolean объектами будет возвращать целые объекты :

>>> int(True) 
 1 
 >>> int(False) 
 0 

Конструктор int также будет делать целые объекты из строк:

>>> a = "10" 
 >>> type(a) 
 <class 'str'> 
 >>> b = int("10") 
 >>> type(b) 
 <class 'int'> 

Строки для конструктора int должны представлять целочисленный литерал:

Второй параметр конструктора int - это указать базу (по умолчанию: 10). Допустимые значения: 0 и 2-36.

Если явная база предоставляется, первым аргументом должна быть строка.

>>> int("111", 2) 
 7 
 >>> int(111, 2) 
 Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
 TypeError: int() can't convert non-string with explicit base 

Строка, используемая для конструктора int с явной базой, должна быть допустимым целым литералом для этой базы:

>>> int('11', 2) 
 3 
 >>> int('12', 2) 
 Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
 ValueError: invalid literal for int() with base 2: '12' 

Можно использовать как префиксные, так и не префиксные строки целых литералов, однако, если они используются, префикс должен соответствовать предоставленной базе.

>>> int('1101', 2) 
 13 
 >>> int('0b1101', 2) 
 13 
 >>> int('0x1101', 2) 
 Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
 ValueError: invalid literal for int() with base 2: '0x1101' 

Если используется префиксная строка и база 0, созданный целочисленный объект будет использовать базу, указанную префиксом. Если префикс не используется, то основание предполагается 10

>>> int('100', 0) 
 100 
 >>> int('0b100', 0) 
 4 
 >>> int('0o100', 0) 
 64