Найти в Дзене
programmer's notes (python and more)

Не много о типе int и системах счисления. Дополнение к подборке "Базовый курс программирования на Python"

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Целые числа и системы счисления

Очередное дополнение к подборке по базовому курсу по языку Python. Но её можно уже отнести к ещё одной подборке, о которой я только задумываюсь, но, которая я думаю, будет многим интересна.

Речь пойдёт о системах счисления. Есть три функции hex(), oct(), bin(), которые переводят целое число в строку представляющую представление числа в шестнадцатеричной системе, восьмеричной системе и двоичной системе. Например

print(hex(22))
print(oct(22))
print(bin(22))

Результат выполнения

0x16
0o26
0b10110

Полезные функции, хотя это и тривиально. Куда интересней функция int(). Обычно мы используем её с одним параметром. Например

# тривиальна операция, получаем то же самое десятичное число
a = int(30)
# отбрасывает дробную часть у вещественного числа
b = int(33.45678)
# преобразует строку в целое число
c = int('234')
print(a, b, c)

Результат выполнения

30 33 234

Однако функция int() может иметь и второй параметр. Второй параметр показывает в какой системе счисления записан первый параметр. Первый параметр при этом должен быть строкой, представляющей число в указанной вторым параметре системе счисления. Второй параметр может принимать значения от 2 до 36 включительно. Это и понятно, речь идёт о представлении чисел с помощью цифр (десять цифр) и 26 букв английского алфавита. Например

print(int('1001', 2))
print(int('15', 8))
print(int('33', 16))
print(int('34', 10))

Результат выполнения

9
13
51
34

Кстати, можно использовать варианты '0b1001', '0o15', '0x33'. Второй же параметр, как вы понимаете имеет значение по-умолчанию 10. В общем виде формат функции int() можно представить как int(x, base=10), т.е. функцию можно вызывать используя и именованный параметр base.

Ну и в заключении рассмотрим довольно типовую задачу. Написать функцию перевода числа из одной системы счисления к другой.

Надо сказать, что я далеко не всегда пытаюсь найти, наиболее оптимальное решение той или иной задачи. Поэтому просьба к вам, дорогие читатели, решили задачу более рационально или нашли решение в Интернет, пишите в комментариях. Я из лени и принципа решений в сети не ищу, поэтому возможно код мой не всегда хорош.

И так задача перевода строки, представляющей число из одной системы в другую. Для определённости будем брать не отрицательные числа. Идея алгоритма очень проста. С помощью int() переводим число в десятичный формат. А далее последовательно делим на основание системы счисления, которая указана третьим параметром. Для получение обозначение разряда используем строку ab. Остаток от деления будет являться индексом для получения разряда (ab[d] + res). Также обратим внимание на try except, для обработки ошибок при выполнении функции int().

Текст программы см. ниже
Текст программы см. ниже
primer63.py

Результат выполнения программы

1010
8
208
170
100000

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Есть всего 10 видов людей, программисты и непрограммисты
Есть всего 10 видов людей, программисты и непрограммисты