Python 实现16以内的进制转换

进制转换方法

利用 **''.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) # 直接调用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值