Как python интерпретирует числа с ведущими нулями

Я новичок в python, я использую python 2.7 когда я набрал это в оболочке python:

print 01
print 010
print 0100
print 01000

Он дает этот результат

1
8
64
512

Я попытался понять, почему он это дал, но, к сожалению, я не понял.

Ответы

Ответ 1

Если число начинается с 0, оно интерпретируется как восьмеричное или базовое 8. Просто выполните:

print 1
print 10
print 100
print 1000

И ваша проблема будет решена.

Подробнее о восьмеричном: http://en.wikipedia.org/wiki/Octal

Вот как легче понять восьмеричность:

восьмеричный 1 десятичный (нормальные числа) 1

восьмеричный 2: десятичный 2

...

восьмеричный 7: десятичный 7

восьмеричный 10: десятичный 8

восьмеричный 11: десятичный 9

восьмеричный 12: десятичный 10

...

восьмеричный 17: десятичный 15

восьмеричный 20: десятичный 16

и т.д. Octal просто использует цифры от 0 до 7.

Надеюсь, это помогло!

Ответ 2

Python интерпретирует число, начинающееся с 0 как octal, которое base 8. Вы можете работать с базой, используя двоичную строку 10 как b^1 === b, где b является базой.

# print the decimal value of the binary number 10
>>> print 0b10
2
# print the decimal value of the octal number 10    
>>> print 010
8
# print the decimal value of the hexadecimal number 10
>>> print 0x10
16

В любой базе символ 1 всегда является значением decimal 1, потому что b^0 === 1 для всех b, так как чтение справа налево индекс числа начинается с 0.

# print the decimal value of the binary number 1
>>> print 0b001
1
# print the decimal value of the octal number 1
>>> print 0001
1
# print the decimal value of the hexadecimal number 1
>>> print 0x001
1

Как только база интерпретируется (0, 0b, 0x), ведущие 0 не важны.

Число символов, необходимых для базы, составляет b, где наибольшие символы равны b-1

            Base (b)   Number of Symbols (b)    Symbols (0 : b-1)
Binary      2          2                        0,1
Octal       8          8                        0,1,2,3,4,5,7,6,7
Decimal     10         10                       0,1,2,3,4,5,7,6,7,8,9

Наибольшее значение, которое может быть представлено числом, (b^n)-1, где n - количество цифр. Для 3-значного числа наибольшее десятичное значение (10^3)-1 = 999, в восьмеричном (8^3)-1 = 511 (decimal), которое 777 в базе 8 и в двоичном (2^3)-1 = 7 (decimal), которое 111 в базе 2. Таким образом, вы можете видеть, что с меньшим количеством символов (нижняя база) значение, которое вы можете представлять, уменьшается с учетом фиксированного количества цифр.