Длина целого числа с ведущими нулями в python - PullRequest
1 голос
/ 21 июня 2020

Как найти длину целого числа. Для этого есть много решений, я использовал (int(math.log10(TheNumber))+1). Но если число «0111», оно возвращается как «1» в python 2.7, а в python 3. * оно возвращает 'SyntaxError: leading zeroes in a decimal number is not permitted'. Но «0111» - это «111». Но использование len(str(number)) дает правильную длину. Любые решения для этого ..

Просто хочу получить разъяснение по этому поводу. Заранее спасибо

Извините за небольшую информацию в вопросе. Вопрос в том, 0111, длина этого числа равна 3, но когда я проверяю длину этого целого числа в python 2.7, он возвращает 2. Код:

a = 0111

print(len(str(a)))

, он возвращает 2 в качестве ответа. , когда я запускаю тот же код в python3. *, он отображается как SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers.

В моей программе, если пользователь дает такой номер, то есть числа с ведущими нулями, как мне преобразовать это число, в котором нет начальных нулей.

my_input = 0111

convert_input = 111

В python 2.7 это считается восьмеричным числом, когда я распечатайте его, он вернет 73 В python 3. * он запрашивает восьмеричное представление (SyntaxError). Если я использую другой метод int(math.log10(TheNumber))+1

import math
a = 0111
print(int(math.log10(a))+1)

В python 2.7 он возвращает 2, неявно преобразуясь в восьмеричное число. В python 3. * он возвращает синтаксическую ошибку. Так что любые решения для этого пойдут на пользу. Если я ошибаюсь, укажите, пожалуйста. Заранее спасибо

1 Ответ

1 голос
/ 21 июня 2020

SyntaxError происходит из-за https://www.python.org/dev/peps/pep-3127/ - что в основном заставило Python 3 перестать молча интерпретировать числа с префиксом 0 как восьмеричные (что и делает Python 2).

И действительно, 0o111 (то есть 111 в восьмеричной системе) оценивается как 73 в десятичной системе.

Ваш вопрос не дает много информации о том, какую длину вы смотрите - и что вы нужно с этим делать. Но если вы хотите узнать, из скольких десятичных цифр состоит число, вы можете сделать что-то вроде:

len(int(number_as_string, 10))

Это гарантирует, что даже '0111' интерпретируется в десятичном виде (то есть 111) .

...