Есть ли хорошая библиотека python, которая может превращать числа в их соответствующие "символы"?

0 = 0
1 = 1
...
9 = 9
10 = a
11 = b
...
35 = z
36 = A
37 = B
...
60 = Z
61 = 10
62 = 11
... 
70 = 19
71 = 1a
72 = 1b

Я не знаю, как это называется. База что-то?

Все, что я хочу, это функция, которая может преобразовывать числа в эти, и они возвращаются к номерам.

Есть ли простая функция, которая может это сделать?

Ответ 1

Вы можете наследовать числа. Номер:

def baseN(base,alphabet='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'):
    class _baseN(numbers.Number):
        digits=alphabet[:base]
        def __init__(self,value):
            if isinstance(value,int):
                self.value=value
                if self.value==0:
                    self.string='0'
                else:
                    tmp=[abs(value)]
                    while tmp[0]!=0:
                        tmp[:1]=divmod(tmp[0],base)
                    tmp=[alphabet[i] for i in tmp]
                    tmp[0]='-' if self.value<0 else ''
                    self.string=''.join(tmp)
            elif isinstance(value,str):
                assert(value.isalnum())
                self.string=str(value)
                self.value=0
                for d in value:
                    self.value=self.value*base+self.digits.index(d)
            else:
                self.value=0
                self.string='0'
        def __int__(self):
            return self.value
        def __str__(self):
            return self.string
        def __repr__(self):
            return self.string
        def __add__(self,another):
            return self.__class__(self.value+int(another))
    return None if base>len(alphabet) else _baseN

Найдена еще одна ошибка. Измените его на функцию factory. Теперь можно справиться с общей ситуацией.

Ответ 2

>>> int("a", 36)
10
>>> int("z", 36)
35
>>> int("10", 36)
36

Другое направление более сложное, но попробуйте этот рецепт ActiveState.

Обычно преобразования базы не различают случаи. Я не уверен, как полностью расширить это, чтобы сделать это различие, но рецепт должен дать вам начало.