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)
aa => 0 => a
二十六进制的aa转十进制得到0
十进制的0转二十六进制得到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)) # 4
print(int('100', 3)) # 9
print(int('100', 11)) # 121
十进制→其它进制
print(bin(31)) # 0b11111
print(oct(31)) # 0o37
print(hex(31)) # 0x1f
2476



被折叠的 条评论
为什么被折叠?



