def convert_base(num, to_base=10, from_base=10):
# сначала переводим десятичные
if isinstance(num, str):
n = int(num, from_base)
else:
n = int(num)
# переводим десятичные в произвольную
alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if n < to_base:
return alphabet[n]
else:
return convert_base(n // to_base, to_base) + alphabet[n % to_base]
In [41]: convert_base('AA16342F', from_base=16, to_base=8)
Out[41]: '25205432057'
In [42]: convert_base('111', from_base=2)
Out[42]: '7'
In [43]: convert_base(33, to_base=16)
Out[43]: '21'
In [44]: convert_base(33333, to_base=20)
Out[44]: '436D'
In [45]: convert_base(3333333, to_base=20)
Out[45]: '10GD6D'