Доброго времени суток, читатели, зрители моего канала 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().
Результат выполнения программы
1010
8
208
170
100000
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.