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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章