【问题标题】:Understanding Pythons int method [duplicate]了解 Python 的 int 方法
【发布时间】:2013-10-27 13:41:52
【问题描述】:

我有一个字符串,"stringify"。正在做:

int("stringify",36)

返回:

81323539083358

有没有办法将该数字转换回“字符串化”?

【问题讨论】:

    标签: python


    【解决方案1】:

    没有将此数字编码回基数 36 的内置方法,但 Wikipedia 上有一个 Python 实现:
    http://en.wikipedia.org/wiki/Base_36#Python_implementation

    这是该代码的略微修改版本(只是将大写字母更改为小写):

    def base36encode(number, alphabet='0123456789abcdefghijklmnopqrstuvwxyz'):
        """Converts an integer to a base36 string."""
        if not isinstance(number, (int, long)):
            raise TypeError('number must be an integer')
    
        base36 = ''
        sign = ''
    
        if number < 0:
            sign = '-'
            number = -number
    
        if 0 <= number < len(alphabet):
            return sign + alphabet[number]
    
        while number != 0:
            number, i = divmod(number, len(alphabet))
            base36 = alphabet[i] + base36
    
        return sign + base36
    
    >>> base36encode(81323539083358)
    'stringify'
    

    【讨论】:

    • 呸,你打败了我,我在控制台中写了类似的东西
    【解决方案2】:

    这里只是为了好玩,它是一个编解码器

    import codecs
    class SimpleB36Encoder:
        def encode(self,txt,errors=[]):
            return str(int(txt,36)),1
    
        def decode(self,txt,errors=[]):
            number = int(txt)
            alphabet = "0123456789abcdefghijklmnopqrstuvwxyz"
            base36 = ''
            sign = ''
            if number < 0:
                sign = '-'
                number = -number
            if 0 <= number < len(alphabet):
                return sign + alphabet[number]
            while number != 0:
                number, i = divmod(number, len(alphabet))
                base36 = alphabet[i] + base36
            return sign + base36,1
    
    
    def find_b36(search=""):
        if search.lower() in ["base36","b36","36"]:
            return codecs.CodecInfo(
                name='base36',
                encode=SimpleB36Encoder().encode,
                decode=SimpleB36Encoder().decode
                )
    
    codecs.register(find_b36)
    encoded = "stringify".encode("36") #note this is a string
    print "stringify encodes to %s"%encoded
    decoded = encoded.decode("36")
    print "%s decodes to %s"%(encoded,decoded)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多