Чтобы перевести число в десятичную систему счисления в Python, передайте его строкой в int() и вторым аргументом укажите основание: int('1011', 2) вернёт 11, int('ff', 16) вернёт 255. Обратно, из десятичной в двоичную, восьмеричную и шестнадцатеричную, переводят встроенные bin(), oct() и hex().
Для троичной, четверичной и любой другой системы готовой функции в языке нет. Её пишут сами, это пять строк с циклом while и операторами % и //. Если операторы Python пока путаются, начните с них, ниже они понадобятся.
SkillboxПрофессия «Python-разработчик»157 335 ₽10 месяцев
НетологияFullstack-разработчик на Python137 011 ₽21 месяц
GeekBrainsДО Профессия Python-разработчик149 001 ₽10 месяцев
SkillFactoryПрофессия Python-разработчик154 044 ₽10 месяцев
Академия СинергияPython-разработчик + ИИ77 900 ₽6 месяцев
ЭдюсонPython-разработчик119 892 ₽9 месяцев
Как перевести число в десятичную систему в питоне

Примеры ниже запускаются в любом редакторе, удобнее всего в VS Code: как создать и запустить файл Python в VS Code, мы разбирали отдельно.
Всю работу делает встроенная функция int(). У неё два аргумента: строка с записью числа и основание системы, из которой переводим.
- Запишите число строкой, в кавычках:
'1011', а не1011. - Вторым аргументом передайте основание: 2, 3, 8, 16 и так далее.
- Получите обычное целое число в десятичной системе, с ним уже можно считать.
print(int('1011', 2)) # из двоичной
print(int('17', 8)) # из восьмеричной
print(int('ff', 16)) # из шестнадцатеричной
print(int('FF', 16)) # регистр букв не важен
print(int('2101', 3)) # из троичной
print(int('z', 36)) # максимальное основание
11
15
255
255
64
35
Основание может быть от 2 до 36. Цифр в десятичной системе десять, поэтому после 9 идут латинские буквы: A значит 10, F значит 15, Z значит 35. Букв в алфавите 26, отсюда и потолок в 36.
Что int() делает внутри: перевод через развёрнутую форму
Полезно понимать, что функция считает за вас, иначе ответ нечем проверить. Каждая цифра умножается на основание в степени своей позиции, позиции считаются справа и с нуля. Для троичного 2101:
2·3³ + 1·3² + 0·3¹ + 1·3⁰ = 54 + 9 + 0 + 1 = 64
Та же формула на Python укладывается в одну строку. Пригодится, если преподаватель просит решить без int():
s = '2101'
print(sum(int(d) * 3 ** i for i, d in enumerate(reversed(s))))
64
Бывает, что двоичное число хранится не строкой, а списком битов, например [1, 0, 1, 1]. Тогда сначала склеиваем его в строку, а потом отдаём в int():
bits = [1, 0, 1, 1]
print(int(''.join(map(str, bits)), 2))
11
Если у числа есть префикс 0b, 0o или 0x
Строку вида '0b1011' или '0xff' можно разобрать с основанием 0. Тогда Python сам поймёт систему по префиксу, как в записи числа прямо в коде.
print(int('0b1011', 0))
print(int('0xff', 0))
print(int(' 1011 ', 2)) # пробелы по краям не мешают
print(int('1_0000_0000', 2)) # подчёркивания между цифрами тоже
print(0b1011, 0o17, 0xff) # литералы в коде уже десятичные числа
11
255
11
256
11 15 255
Последняя строка показывает частую путаницу. Если число записано в коде литералом 0b1011, переводить его не нужно: для Python это уже 11, просто записанное по-другому.
Из десятичной в двоичную, восьмеричную и шестнадцатеричную
Для трёх самых популярных систем есть готовые функции. Они возвращают строку с префиксом, который часто приходится отрезать срезом [2:].
| Система | Функция | Результат для 202 | Без префикса |
|---|---|---|---|
| Двоичная | bin(n) |
0b11001010 |
format(n, 'b') |
| Восьмеричная | oct(n) |
0o312 |
format(n, 'o') |
| Шестнадцатеричная | hex(n) |
0xca |
format(n, 'x') или 'X' |
n = 202
print(bin(n), oct(n), hex(n))
print(bin(n)[2:], oct(n)[2:], hex(n)[2:])
print(format(n, 'b'), format(n, 'X'))
print(f'{n:010b}') # дополнить нулями до 10 знаков
0b11001010 0o312 0xca
11001010 312 ca
11001010 CA
0011001010
Вариант с format() и f-строкой удобнее, когда нужна запись фиксированной длины, например байт из восьми бит. Не путайте эти функции с кодировкой Base64: она превращает байты в текст и к переводу числа между системами отношения не имеет. Все коды формата перечислены в описании мини-языка форматирования в документации Python.
Перевод в троичную и любую другую систему счисления

Для основания 3, 4, 5 и дальше встроенной функции нет. Работает школьный алгоритм: делим число на основание, записываем остаток, повторяем с частным, пока не дойдём до нуля. Остатки, прочитанные снизу вверх, и есть запись числа.
Вот как это выглядит для числа 64 в троичной системе, в самом коротком виде:
n = 64
r = ''
while n > 0:
r = str(n % 3) + r # остаток дописываем слева
n //= 3 # переходим к частному
print(r)
2101
Тот же приём работает для четверичной, пятеричной и семеричной систем, меняется только тройка. Как устроен сам цикл, подробно разобрано в статье про цикл while в Python.
Универсальная функция для любого основания до 36
У короткой версии три слабых места. Для нуля она вернёт пустую строку, отрицательные числа не обработает, а при основании больше 10 вместо букв напишет двузначные остатки. Функция ниже закрывает все три случая:
DIGITS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def to_base(n, base):
if n == 0:
return '0'
sign = '-' if n < 0 else ''
n = abs(n)
digits = ''
while n > 0:
digits = DIGITS[n % base] + digits
n //= base
return sign + digits
print(to_base(64, 3))
print(to_base(255, 4))
print(to_base(100, 7))
print(to_base(0, 3))
print(to_base(-64, 3))
print(int(to_base(64, 3), 3)) # проверка обратным переводом
2101
3333
202
0
-2101
64
Последняя строка стоит того, чтобы её запомнить. Перевели, потом вернули обратно через int(): если получилось исходное число, функция написана верно.
Из одной недесятичной системы в другую
Прямого перевода, скажем, из троичной в пятеричную в Python нет, и он не нужен. Идём через десятичную: int() разбирает исходную запись, to_base() собирает новую.
def convert(s, from_base, to):
return to_base(int(s, from_base), to)
print(convert('2101', 3, 5))
print(convert('FF', 16, 2))
224
11111111
Если установлен NumPy
В библиотеке NumPy есть готовая функция base_repr(), она переводит в систему с основанием до 36. Тянуть NumPy ради одной функции нет смысла, но если он уже стоит в проекте, это одна строка.
import numpy as np
print(np.base_repr(64, base=3))
print(np.base_repr(255, base=16))
2101
FF
Пример задачи на системы счисления в стиле ЕГЭ
В школьной информатике перевод в троичную и другие системы почти никогда не нужен сам по себе. Обычно надо перебрать много чисел и проверить что-то в их записи. Возьмём такую задачу:
Сколько чисел от 1 до 1000 содержат в троичной записи ровно две цифры 2?
Руками перебирать тысячу чисел долго, а в Python это пять строк поверх функции to_base():
count = 0
for n in range(1, 1001):
if to_base(n, 3).count('2') == 2:
count += 1
print(count)
326
Ответ легко проверить вторым способом: замените to_base(n, 3) на np.base_repr(n, 3). Совпали ответы двух разных функций, значит, ошибки в вашем коде нет. Если вы готовитесь к поступлению на IT-специальность, в статье что сдавать на Python-разработчика собраны предметы и пути после 9 и 11 класса. А если хочется разобрать язык глубже школьной программы, загляните в подборку курсов по Python с ценами и сроками.
Дробные числа: что умеет int() и что нет
int() переводит только целые числа. Строка '1.5' или '0.101' вызовет ошибку при любом основании. Для дробной части работает обратный школьный алгоритм: умножаем на основание и забираем целую часть.
def frac_to_base(x, base, k=8):
digits = ''
for _ in range(k):
x *= base
d = int(x)
digits += str(d)
x -= d
if x == 0:
break
return '0.' + digits
print(frac_to_base(0.625, 2))
print(frac_to_base(0.1, 2, 10))
0.101
0.0001100110
Число 0,625 записалось в двоичной системе точно, а 0,1 нет: двоичная дробь у него бесконечная, и мы обрезали её на десяти знаках. По этой же причине в Python 0.1 + 0.2 не равно ровно 0,3. Когда важна точная десятичная арифметика, например в денежных расчётах, используют модуль decimal.
Частые ошибки при переводе систем счисления

| Что видите | Почему | Что сделать |
|---|---|---|
ValueError: invalid literal for int() with base 2: '102' |
В записи есть цифра, которой нет в этой системе: в двоичной только 0 и 1 | Проверьте основание и саму строку |
TypeError: int() can't convert non-string with explicit base |
Передали число вместо строки: int(1011, 2) |
Возьмите запись в кавычки или оберните в str() |
ValueError: int() base must be >= 2 and <= 36, or 0 |
Основание вне допустимого диапазона | Для систем больше 36 нужна своя таблица цифр |
ValueError: invalid literal for int() with base 10: '0b1011' |
Префикс есть, а основание указано другое или не указано | Передайте основание 0 или 2 |
| Своя функция выдаёт число задом наперёд | Остатки дописывали справа: r = r + str(n % 3) |
Дописывайте слева или разверните строку срезом [::-1] |
| Для нуля получается пустая строка | Цикл while n > 0 не выполнился ни разу |
Добавьте отдельную проверку на 0, как в to_base() |
Ещё одна ловушка с bin(): для отрицательного числа она возвращает -0b101, то есть знак плюс модуль. Это не дополнительный код, который рисуют в задачах про устройство памяти. Если нужен именно он, берут маску: format(-5 & 0xFF, '08b') даст 11111011.
Где освоить Python системно
Перевод между системами счисления закрывает одну маленькую задачу. Чтобы писать на Python уверенно, нужны типы данных, функции, работа с файлами и библиотеками, и всё это удобнее собирать на курсе, где проверяют домашние задания. Если хочется сначала потренироваться самостоятельно, начните с 30 задач по Python для начинающих.
Ниже пять курсов из нашего каталога, а все программы с ценами и сроками собраны на странице онлайн-курсов по Python.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия «Python-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 011 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 118 666 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Программирование на Python ПРО Перейти на сайт курса | 119 600 ₽ | - | 17 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




