Python手写进制转换(二进制、十进制、十六进制、26进制)

26进制⇌十进制

ALPHABET = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')

def alphabet2digit(alphabet):
    """26进制 -> 10进制"""
    return sum(ALPHABET.index(a) * (26 ** e) for e, a in enumerate(reversed(alphabet)))

def digit2alphabet(digit):
    """10进制 -> 26进制"""
    mod, remainder = divmod(digit, 26)
    alphabet = ALPHABET[remainder]
    while mod:
        mod, remainder = divmod(mod, 26)
        alphabet = ALPHABET[remainder] + alphabet
    return alphabet

for i in ('aa', 'bc', 'caa'):
    d = alphabet2digit(i)
    a = digit2alphabet(d)
    print(d, a, i == a)

二进制⇌十进制

def alphabet2digit(alphabet):
    """2进制 -> 10进制"""
    return sum(int(a) * (2 ** e) for e, a in enumerate(reversed(alphabet)))

def digit2alphabet(digit):
    """10进制 -> 2进制"""
    mod, remainder = divmod(digit, 2)
    alphabet = str(remainder)
    while mod:
        mod, remainder = divmod(mod, 2)
        alphabet = str(remainder) + alphabet
    return alphabet

for i in (0, 7, 100):
    a = digit2alphabet(i)
    d = alphabet2digit(a)
    print(d, a, i == d)

内置函数

其它进制→十进制

print(int('100', 2))
print(int('100', 3))
print(int('100', 11))

十进制→其它进制

print(bin(31))
print(oct(31))
print(hex(31))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章