
В языке Python предусмотрены встроенные функции bin(), oct() и hex() для преобразования целых чисел в двоичную, восьмеричную и шестнадцатеричную системы соответственно. Каждая из них возвращает строку с префиксом: ‘0b’ для двоичной, ‘0o’ для восьмеричной, ‘0x’ для шестнадцатеричной.
Для перевода числа в систему счисления с произвольным основанием от 2 до 36 применяется функция format() с использованием спецификаторов или собственная реализация через деление с остатком. Пример: format(255, 'x') вернёт строку ‘ff’, соответствующую шестнадцатеричной записи числа 255. Для других оснований потребуется алгоритм с циклом и использованием string.digits + string.ascii_lowercase в качестве алфавита.
Функция int() с двумя аргументами позволяет преобразовать строку из любой системы счисления (до 36 включительно) обратно в десятичное число. Пример: int('1a', 16) вернёт 26.
При работе с отрицательными числами важно учитывать, что стандартные функции возвращают строки с минусом перед префиксом: ‘-0b1010’. При ручной реализации алгоритма преобразования необходимо отдельно обрабатывать знак и использовать abs().
Как перевести целое число в двоичную, восьмеричную и шестнадцатеричную систему с помощью встроенных функций

Для перевода целого числа в двоичную систему используется функция bin(). Она принимает целое число и возвращает строку, начинающуюся с префикса 0b, за которым следует последовательность битов. Пример: bin(42) вернёт '0b101010'.
Функция oct() выполняет преобразование в восьмеричную систему. Результат – строка с префиксом 0o. Пример: oct(42) вернёт '0o52'.
Для получения представления числа в шестнадцатеричной системе используется hex(). Возвращаемая строка имеет префикс 0x. Пример: hex(42) вернёт '0x2a'.
Если нужно избавиться от префикса, используйте срез: bin(42)[2:] даст '101010'. Это применимо ко всем трём функциям.
Все три функции работают только с целыми числами. При передаче другого типа данных будет выброшено исключение TypeError.
Как вручную реализовать перевод целого числа в любую систему счисления

Для ручной реализации перевода целого числа в систему счисления с основанием от 2 до 36 используется деление на основание с сохранением остатков. Остатки записываются в обратном порядке. Для цифр больше 9 применяются символы латинского алфавита: 10 – ‘A’, 11 – ‘B’ и так далее до 35 – ‘Z’.
Пример функции на Python:
def convert_number(n, base):
if not (2 <= base <= 36):
raise ValueError("Основание должно быть от 2 до 36")
if n == 0:
return "0"
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result = ""
is_negative = n < 0
n = abs(n)
while n > 0:
result = digits[n % base] + result
n //= base
if is_negative:
result = "-" + result
return result
Функция корректно обрабатывает отрицательные значения. Проверка диапазона основания обязательна, иначе индексация строки digits может выйти за границы. Результат возвращается в виде строки, так как системы счисления с основанием больше 10 используют символы.
Пример: convert_number(255, 16) вернёт 'FF', а convert_number(-42, 2) – '-101010'.
Как перевести число с плавающей запятой в другую систему счисления

Числа с плавающей запятой нельзя напрямую перевести в другую систему счисления стандартными средствами Python. Необходимо отдельно обрабатывать целую и дробную части. Пример ниже показывает перевод десятичного числа в двоичную систему:
def float_to_base(num, base, precision=10):
int_part = int(num)
frac_part = num - int_part
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
# Перевод целой части
int_result = ''
if int_part == 0:
int_result = '0'
else:
while int_part > 0:
int_result = digits[int_part % base] + int_result
int_part //= base
# Перевод дробной части
frac_result = ''
count = 0
while frac_part > 0 and count < precision:
frac_part *= base
digit = int(frac_part)
frac_result += digits[digit]
frac_part -= digit
count += 1
return int_result + '.' + frac_result if frac_result else int_result
# Пример
- base – основание целевой системы счисления (от 2 до 36);
- precision – количество знаков после запятой;
- используются символы до 'Z' – возможно представление до 36 системы;
- дробная часть вычисляется умножением на основание и выделением целого числа;
- остаток снова участвует в цикле до достижения заданной точности или обнуления.
При работе с системами счисления выше 10 важно учитывать, что цифры заменяются буквами начиная с 'A' для 10, 'B' для 11 и так далее.
Для обратного преобразования следует обрабатывать строку, отдельно вычисляя значение целой и дробной части, используя отрицательные степени основания для дробной части.
Как обрабатывать ввод числа в виде строки и выполнять перевод

Пользовательский ввод чаще всего поступает в виде строки, поэтому требуется предварительная проверка и преобразование перед переводом числа в другую систему счисления. Чтобы распознать систему исходного ввода, используется второй аргумент функции int(), задающий основание системы.
Пример: преобразование строки '1A3F' из шестнадцатеричной в десятичную:
value = '1A3F'
base = 16
decimal = int(value, base)
Если ввести, например, '128' при основании 2, произойдёт ошибка ValueError, так как символ '8' недопустим в двоичной системе. Чтобы отловить такие ошибки, используйте конструкцию try-except:
try:
decimal = int(value, base)
except ValueError:
print("Недопустимое число для выбранной системы счисления")
После успешного преобразования в десятичную систему можно использовать функции bin(), oct() и hex() для перевода в другие системы:
binary = bin(decimal)[2:]
octal = oct(decimal)[2:]
hexadecimal = hex(decimal)[2:].upper()
Чтобы избежать ввода лишних символов (например, пробелов), следует очищать строку с помощью метода strip(). Пример с предварительной очисткой и переводом:
user_input = input("Введите число: ").strip()
try:
decimal = int(user_input, 16)
print("Двоичная форма:", bin(decimal)[2:])
except ValueError:
print("Ошибка: введено недопустимое значение")
При необходимости динамического задания основания от пользователя ввод также должен быть проверен:

base_input = input("Введите основание системы счисления: ").strip()
if base_input.isdigit():
base = int(base_input)
if 2 <= base <= 36:
try:
decimal = int(user_input, base)
except ValueError:
print("Недопустимое число")
else:
print("Основание должно быть от 2 до 36")
else:
print("Основание должно быть числом")
Для автоматической обработки ввода числа в разных системах счисления можно использовать префиксы 0b, 0o, 0x, а затем вызывать int() без указания основания:
value = input("Введите число с префиксом: ").strip()
try:
decimal = int(value, 0)
print("Десятичное значение:", decimal)
except ValueError:
print("Неверный формат числа")
Как перевести число из произвольной системы счисления в десятичную

Для перевода строки, представляющей число в системе счисления с основанием от 2 до 36, в десятичное целое используется встроенная функция int():
int(строка_числа, основание)
Пример: int('1A', 16) вернёт 26, так как 1A в шестнадцатеричной системе – это 1×16 + 10.
Поддерживаются латинские буквы от A до Z (или a до z) для значений от 10 до 35. Буквы чувствительны к регистру не являются – '1a' и '1A' дадут одинаковый результат.
При некорректных символах или значении, не соответствующем основанию, будет вызвано исключение ValueError. Для обработки ошибок используйте конструкцию try-except:
try:
число = int('1101', 2)
except ValueError:
print('Неверный формат числа')
Для автоматизации обработки пользовательского ввода перед передачей в int() удалите лишние пробелы: строка.strip(). Не допускается наличие знаков препинания и символов вне допустимого диапазона.
Если нужно распознать число с префиксом (например, 0b для двоичного), удалите префикс вручную или используйте int(строка, 0). Этот вызов определит основание автоматически по префиксу:
int('0o17', 0) # 15
int('0x10', 0) # 16
Как обработать отрицательные числа при переводе между системами счисления

При переводе отрицательных чисел в другую систему счисления на Python важно учитывать, что встроенные функции, такие как bin(), oct() и hex(), возвращают строку с префиксом минуса и соответствующим обозначением системы: -0b, -0o или -0x. Например, bin(-10) даст '-0b1010'.
Если нужно получить представление без префиксов или использовать нестандартную систему (например, основание 3, 7 или 12), отрицательное число следует обрабатывать вручную. Сначала берётся модуль числа, затем результат переводится в нужную систему, после чего добавляется знак минус.
Пример перевода отрицательного числа в произвольную систему:
def to_base(n, base):
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if base < 2 or base > len(digits):
raise ValueError("Основание должно быть от 2 до 36")
sign = '-' if n < 0 else ''
n = abs(n)
res = ''
while n:
res = digits[n % base] + res
n //= base
return sign + (res or '0')
Пример использования
Такой подход работает с любым основанием от 2 до 36 и позволяет обойти ограничения встроенных функций, которые поддерживают только двоичную, восьмеричную и шестнадцатеричную системы.
Если требуется строгое соответствие формату (например, без знака минус, с дополнительным нулевым выравниванием или фиксированной длиной), можно дополнительно обрабатывать результат на этапе формирования строки.
