有没有一个好的python库可以将数字转换成各自的“符号”?

时间:2010-12-04 01:44:31

标签: python numbers computer-science int base

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

我不知道这叫什么。什么基础?

我想要的只是一个可以将数字转换为这些数字的函数,然后将这些数字转换回数字。

是否有一个简单的功能可以做到这一点?

2 个答案:

答案 0 :(得分:4)

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

另一个方向更复杂,但请尝试this ActiveState recipe

通常情况下,基本转换不会区分案例。我不确定如何完全扩展这个区别,但配方应该给你一个开始。

答案 1 :(得分:2)

您可以继承numbers.Number:

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

发现另一个错误。将其更改为工厂功能。现在可以处理一般情况。