Почему в Python 04000 // 1000 возвращает 2?

Я пытаюсь разделить 5-значное число на его цифры, используя деление на пол, а затем по модулю для каждой цифры. Почему 04000 // 1000 возвращает 2?

>>> 04//1
4
>>> 040//10
3
>>> 0400//100
2
>>> 04000//1000
2
>>> 4//1
4
>>> 40//10
4
>>> 400//100
4
>>> 4000//1000
4

2 ответа

Решение

Потому что восьмеричные числа в Python 2 начинаются с 0. Это действительно 2048 десятичных.

>>> 04000
2048

Python 3 меняет это поведение, чтобы использовать 0o в качестве модификатора для восьмеричного:

>>> 04000
  File "<stdin>", line 1
    04000
        ^
SyntaxError: invalid token
>>> 0o4000
2048

Что ж, 04000 восьмеричное == 2048 (десятичный)

 04000 // 1000 == 
  2048 // 1000 == 
     2 # integer division
Другие вопросы по тегам