Почему базовое значение для int () ограничено между 36 и 2 - PullRequest
0 голосов
/ 18 января 2019

Я обнаружил, что при запуске следующего выражения в python

int(33, base=100)

Я получаю следующую ошибку:

ValueError: int() base must be >= 2 and <= 36, or 0

Я не смог найти объяснения этому ограничению; другой вопрос переполнения стека о том же сообщении об ошибке не упоминается, почему базовый аргумент ограничен этим диапазоном.

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Это практическое соглашение о реализации.Что вы представляете в качестве набора символов для базы 100?: -)

Использование цифр и всего алфавита достаточно распространено, поэтому функция base с непрерывным набором приемлемых базовых значений реализовала эту функциональность до сих пор.Base 1 - это просто len (arg).

Существует также соглашение для кодирования base-64;без соглашения для значений 37-63, однако, функция base оставила значение radix-64 для отдельного интерфейса.

0 голосов
/ 18 января 2019

Прежде всего: вы можете указать базу для int() только при преобразовании строк в числа. Скажем, у вас есть строка с шестнадцатеричным числом, поэтому основание 16:

>>> int('2a', 16)
42

Этот результат значительно отличается от той же строки, интерпретируемой как другое основание:

>>> int('2a', 11)
32
>>> int('2a', 29)
68

Вам когда-либо понадобится база целого числа, только когда представляет значение визуально или при разборе целочисленного значения из строкового представления. Вы можете отобразить целочисленное значение многими различными способами, но объект int является значением, а не визуальным представлением и не имеет базы, и вы не можете изменить эту базу.

Логическое расширение, когда уже поддерживается шестнадцатеричная запись (цифры 0-9 и буквы A-F), также поддерживается с использованием букв G-Z, а 10 цифр и 26 букв позволяют использовать основание 36:

>>> int('zz', 36)
1295

Для дальнейших баз необходимо будет использовать не алфавитно-цифровые символы, для которых нет четкого предварительно установленного порядка.

Вы не можете иметь базу ниже 2; вы не можете сосчитать только с одной цифры, значение 0 не изменится.

0 голосов
/ 18 января 2019

Аргумент base для int предназначен для использования при синтаксическом анализе строки, а не при передаче int в int:

>>> int('ff', 16)
255

Хорошо известно соглашение об использовании, b, c, ..., z для цифр, представляющих 10, 11, 12, ..., 35, но нет никакого соглашения о том, какой символ использовать для цифры 36 в базе 37.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...