Мы можем использовать списки для этого:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
return [bn[i:i+leng][::-1] for i in range(0, len(bn), leng)][::-1]
мы можем немного повысить эффективность, изменив объект range(..)
:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
n = len(bn) - 1
return [bn[i:i+leng][::-1] for i in range(n - n%leng, -leng, -leng)]
Итак, здесь мы сначала получаем двоичную строку в обратном порядке, а затем перебираем эту строку и каждый раз срезаем строку. Конечный результат меняется на противоположный.
Это дает ожидаемое:
>>> bin_divby(0b1001011000, 1)
['1', '0', '0', '1', '0', '1', '1', '0', '0', '0']
>>> bin_divby(0b1001011000, 2)
['10', '01', '01', '10', '00']
>>> bin_divby(0b1001011000, 3)
['1', '001', '011', '000']
>>> bin_divby(0b1001011000, 4)
['10', '0101', '1000']
>>> bin_divby(0b1001011000, 5)
['10010', '11000']
>>> bin_divby(0b1001011000, 6)
['1001', '011000']
>>> bin_divby(0b1001011000, 7)
['100', '1011000']