Oct: примеры (PYTHON)

Преобразование чисел функцией oct в языке Python
Раздел: Встроенные функции, Преобразование типов
oct(number): str

Функция oct в Python

Функция oct() в языке Python преобразует целое число в строковое представление в восьмеричной системе счисления. Результат всегда начинается с префикса 0o, что позволяет явно указать на восьмеричную систему. Функция часто применяется для отладки, работы с низкоуровневыми данными или при необходимости вывода чисел в форматах, отличных от десятичного.

Функция принимает один обязательный аргумент:

  • x - целое число (объект типа int) или объект, реализующий метод __index__(), возвращающий целое число. Другие типы данных вызывают исключение TypeError.

Возвращаемое значение - строка (тип str), содержащая восьмеричное представление числа с префиксом 0o. Для отрицательных чисел результат начинается с -0o, а для нуля возвращается 0o0.

Примеры использования функции oct

Использование с положительными и отрицательными целыми числами:

print(oct(10))
0o12
print(oct(-10))
-0o12

Применение к нулю:

print(oct(0))
0o0

Использование с объектом, реализующим метод __index__:

class MyClass:
    def __index__(self):
        return 42

obj = MyClass()
print(oct(obj))
0o52

Похожие функции в Python

В Python существуют другие функции для преобразования чисел в строковые представления в различных системах счисления:

  • bin(x) - преобразует целое число в двоичную строку с префиксом 0b.
  • hex(x) - преобразует целое число в шестнадцатеричную строку с префиксом 0x.
  • format(x, 'o') - возвращает восьмеричное представление числа без префикса. Добавление символа # в форматную строку ('#o') добавляет префикс 0o.
  • f'{x:o}' - f-строка с форматом для восьмеричного вывода. Использование #{x:o} также добавляет префикс.

Функция oct() удобна для быстрого преобразования с гарантированным префиксом, тогда как format() и f-строки предоставляют больше гибкости при форматировании.

Альтернативы в других языках программирования

JavaScript: метод toString(8) преобразует число в восьмеричную строку без префикса.

console.log((10).toString(8));
12

PHP: функция decoct() возвращает восьмеричную строку без префикса.

echo decoct(10);
12

Java: метод Integer.toOctalString() возвращает строку без префикса.

System.out.println(Integer.toOctalString(10));
12

C#: использование форматирования Convert.ToString() или строк форматирования.

Console.WriteLine(Convert.ToString(10, 8));
12

SQL: в некоторых СУБД, например MySQL, функция OCT() возвращает восьмеричное представление строкой.

SELECT OCT(10);
12

Lua: стандартной функции нет, но можно использовать string.format() с форматным спецификатором %o.

print(string.format('%o', 10))
12

Golang: функция fmt.Sprintf() с форматом %o или %#o для префикса.

import "fmt"
fmt.Printf("%#o", 10)
012

Kotlin: метод toString(8) аналогичен JavaScript.

println(10.toString(8))
12

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

Типичные ошибки при использовании

Наиболее частая ошибка - передача аргумента, не являющегося целым числом или объектом с методом __index__.

print(oct(10.5))
TypeError: 'float' object cannot be interpreted as an integer

Передача строки также вызывает исключение:

print(oct("10"))
TypeError: 'str' object cannot be interpreted as an integer

Ошибка может возникать при использовании пользовательского класса без реализации __index__:

class MyClass:
    pass

obj = MyClass()
print(oct(obj))
TypeError: 'MyClass' object cannot be interpreted as an integer

Изменения в последних версиях Python

В Python 3 функция oct() всегда возвращает строку с префиксом 0o. В Python 2 функция возвращала строку, которая для положительных чисел могла начинаться с 0 без последующей o, а для отрицательных - с -0. Изменение в Python 3 улучшило единообразие с функциями bin() и hex().

Начиная с Python 3.11, значимых изменений в работе функции не вносилось. Актуальные версии Python сохраняют её поведение стабильным.

Расширенные примеры применения oct

Использование oct совместно с срезами для получения восьмеричного представления без префикса:

Пример python
result = oct(42)[2:]
print(result)
52

Преобразование списка целых чисел в восьмеричные строки:

Пример python
numbers = [8, 16, 24]
octal_list = [oct(num) for num in numbers]
print(octal_list)
['0o10', '0o20', '0o30']

Использование восьмеричных литералов для проверки работы функции:

Пример python
value = 0o52  # Восьмеричный литерал для числа 42
print(oct(value))
0o52

Пользовательский класс с методом __index__ для управления преобразованием:

Пример python
class CustomIndex:
    def __init__(self, value):
        self.value = value
    def __index__(self):
        return self.value * 2

obj = CustomIndex(5)
print(oct(obj))
0o12

Обработка отрицательных чисел при форматировании с использованием f-строк как альтернативы:

Пример python
num = -42
print(f'{num:#o}')
-0o52

Восстановление десятичного числа из восьмеричной строки с помощью int:

Пример python
oct_str = '0o52'
decimal_num = int(oct_str, 8)
print(decimal_num)
42

питон oct function comments

En
Oct Convert to octal string