/
Вопросы и ответы
/
Python
/

Какая функция нужна перевода в восьмеричную систему в Python?

Какая функция нужна перевода в восьмеричную систему в Python?

4 года назад

Andrey Moshkov

Ответы

0

Для перевода числа в восьмеричную систему счисления нужно воспользоваться функцией oct(). Функция возвращает конвертированное число в виде строки:

1
2
3
x = oct(255)

print(x) # => 0o377

4 года назад

Владимир Устянивский

0

Перевод в восьмеричную систему делает встроенная функция oct(). Она возвращает строку с префиксом 0o:

1
2
print(oct(8))    # => 0o10
print(oct(64))   # => 0o100

Без префикса число выводят через format() или f-строку:

1
2
print(format(64, "o"))  # => 100
print(f"{64:o}")        # => 100

С ведущими нулями

Если нужно фиксированное число знаков, например 3 или 4:

1
2
print(format(9, "03o"))  # => 011
print(f"{8:04o}")        # => 0010

Права доступа в Linux записывают тремя восьмеричными цифрами, поэтому формат 03o встречается часто:

1
2
3
import os
mode = os.stat("script.sh").st_mode
print(format(mode & 0o777, "03o"))  # например, 755

Обратный перевод

1
2
3
print(int("17", 8))      # => 15
print(int("0o17", 0))    # => 15 — основание по префиксу
print(0o17)              # => 15 — восьмеричный литерал в коде

Как перевести вручную

Делите число на 8 и записывайте остатки. Восьмеричная запись — остатки снизу вверх.

Переведём 100:

1
2
3
100 : 8 = 12, остаток 4
 12 : 8 = 1,  остаток 4
  1 : 8 = 0,  остаток 1

Снизу вверх: 144. Проверка: oct(100) → '0o144'.

Через двоичную запись

Каждая восьмеричная цифра соответствует трём битам. Разбейте двоичное число на тройки справа налево:

1
1100100₂ → 1 100 100 → 1 4 4 → 144₈

Тот же алгоритм на Python:

1
2
3
4
5
6
7
8
9
10
def to_octal(n):
    if n == 0:
        return "0"
    digits = ""
    while n > 0:
        digits = str(n % 8) + digits
        n //= 8
    return digits

print(to_octal(100))  # => 144

Частые ошибки

oct() принимает только целые числа: oct(2.5) вызовет TypeError. Отрицательные числа выводятся со знаком: oct(-8) → '-0o10'.

В Python 3 число с ведущим нулём 010 — синтаксическая ошибка. Восьмеричные литералы пишут с префиксом: 0o10.

Системы счисления и встроенные функции разбирают в бесплатном курсе «Основы Python».

18 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845