进制转换方法
利用 **''.format()** 和 **eval()** 来实现简单的进制转换
ii=input('input num:') #取值
iid=eval(ii) #变数字
bnum_str='{:b}'.format(iid) #二进制化(字符串)
bnum=eval(bnum_str) #字符串转数字(留用)
str_putOut='num in b is:{:b}'.format(iid) #输出准备
print(bnum,str_putOut) #显示数字和准备的输出内容
format() 函数进行格式化
def format_dec2bin(n: int, base: int) -> str:
"""
format 格式化方法
:param n:
:param base:
:return:
"""
if base == 2:
return "0b{:b}".format(n)
if base == 8:
return "0o{:o}".format(n)
if base == 16:
return "0x{:x}".format(n)
数学方法
十进制 向2 8 16进制转换
"""
2 8 10 16 进制的相互转换
binary 二进制
octal 八进制
decimalism 十进制
hexadecimal 十六进制
"""
def math_dec2bin(n: int, base: int) -> str:
""""
:param n 对应的是 十进制的数
:param base 对应的进制基数
:return str 类型的进制数
"""
ans = ""
tem = n
n = abs(n) # n 是负数时,需要先转换为整数进行转换 提高函数的健壮性 类似于 bin()的实现
while n:
temp = n % base
if temp < 10:
ans += str(temp)
elif temp == 10:
ans += 'a'
elif temp == 11:
ans += 'b'
elif temp == 12:
ans += 'c'
elif temp == 13:
ans += 'd'
elif temp == 14:
ans += 'e'
elif temp == 15:
ans += 'f'
n //= base
if base == 2:
ans += 'b0'
if base == 8:
ans += 'o0'
if base == 16:
ans += 'x0'
if tem < 0:
ans += "-"
return ans[::-1]
二进制转换为10进制
def bin2dec(bin: str) -> int:
if bin[:2] == '0b' or bin[:2] == "0B":
bin = bin[2:]
_len = len(bin)-1
ans = 0
index = 0
for i in bin:
ans += int(i) * 2 ** (_len - index)
index += 1
return ans
int(x,base) # base可为任意进制数
def bin_str2dec_int(str1: str, base: int) -> int:
"""
可任意转换 10以内的进制 超出10 的进制不可
:param str1: 需要转换的进制字符串
:param base: 进制基数 如2 3 4 5
:return: 返回对应的10进制数
"""
_len = len(str1)
ans = 0
index = 0
for i in str1:
ans += int(i) * base ** (_len - index - 1)
index += 1
return ans
def bin_str2dec_int(str1: str, base: int) -> int:
"""
# 16进制内的皆可转换
:param str1: 需要转换的进制字符串
:param base: 进制基数 如2 3 4 5
:return: 返回对应的10进制数
"""
_len = len(str1)
ans = 0
index = 0
dic = {"1": 1,"2": 2,"3": 3,"4": 4,"5": 5,"6": 6,"7": 7,"8": 8,"9": 9,"A": 10,"B": 11,"C": 12,"D": 13,"E": 14,
"F": 15,
"a": 10,
"b": 11,
"c": 12,
"d": 13,
"e": 14,
"f": 15
}
for i in str1:
ans += dic[i] * base ** (_len - index - 1)
index += 1
return ans
def bin_str2dec_int(str1: str) -> int:
"""
# 16进制内的皆可转换
:param str1: 需要转换的进制字符串
:param base: 进制基数 如2 3 4 5
:return: 返回对应的10进制数
"""
_len = len(str1)
ans = 0
index = 0
base = 26
# ord ord("a") # 97
# chr chr(97) #a
dic = {str(chr(ord('A') + i)): i + 1 for i in range(0, 26)}
for i in str1:
ans += dic[i] * base ** (_len - index - 1)
index += 1
return ans
lambda表达式
bina = lambda n, base: "" if n == 0 else bina(n // base,base) + str(n % base)
bina(2,2) # 直接调用