计数但有字符

2024-04-25 01:27:56 发布

您现在位置:Python中文网/ 问答频道 /正文

像youtube这样的网站的ID使用全字符范围来生成ID,比如dQw4w9WgXcQ。我想知道这将如何通过选择一个数字,并把它变成一个压缩的数字使用像这样的基本字符的完整范围

a>;b>;c>;d>;e>;ect>;azy>;阿兹>;aAa>;aAb公司

我已经用javascript写了这篇文章,它是可怕的,因为我是如何做的,它被嵌入了一个可能的字符数组中的循环。我真的希望我不需要再这样做了,但我能找到最好的有效方式是int到hex,但hex不能涵盖我需要的所有字符


Tags: gtidyoutube网站公司数字javascript字符
1条回答
网友
1楼 · 发布于 2024-04-25 01:27:56

这可能接近你的想法:

def int_to_string_fns(chars):
    num_chars = len(chars)
    char_to_i = dict((c,i) for i, c in enumerate(chars))

    # create 2 functions for the given characters, 
    # one to convert an int to a string, and one to 
    # convert a string back to the corresponding int
    def _to_string(i, minsize=0):

        pad = []
        ret = []
        if minsize:
            maxval = num_chars ** (minsize-1)
            while maxval > max(i, 1):
                pad.append(chars[0])
                maxval /= num_chars

        if i > 0:
            while i:
                i, c = divmod(i, num_chars)
                ret.append(chars[c])
        else:
            ret.append(chars[0])

        return ''.join(pad + ret[::-1])

    def _from_string(s):
        mult = num_chars
        ret = 0
        for c in s:
            ret *= mult
            ret += char_to_i[c]
        return ret

    return _to_string, _from_string

enc,dec = int_to_string_fns("ABCDEFGHIJKLMNOP")
print(enc(100))
print(dec("GE"))

for i in range(100,110):
    print(i, enc(i), dec(enc(i)))

印刷品

GE
100

100 GE 100
101 GF 101
102 GG 102
103 GH 103
104 GI 104
105 GJ 105
106 GK 106
107 GL 107
108 GM 108
109 GN 109

相关问题 更多 >