xinzaiyuan

进制介绍

转换二进制: bin()函数

转换十进制:int()函数

转换十六进制:hex()函数

转换8进制:oct()函数

1. 十进制转为其它进制

1. 十进制转为二进制

print(bin(4)) # 输出0b100
print(\'{0:b}\'.format(4)) # 输出100 

2. 十进制转为八进制

print(oct(8)) #输出0o10
print(\'{0:o}\'.format(8)) # 输出10

3. 十进制转十六进制

print(hex(15)) # 输出0xf
print(\'{0:x}\'.format(15)) # 输出f

2. 其它进制转十进制

1. 二进制转为十进制

# int(\'要转换的字符串\',制定进制)
print(int(\'1010\', 2)) # 输出10
print(eval(\'0b1010\')) # 输出10
print(\'{0:d}\'.format(0b1010)) # 输出10

2. 八进制转为十进制

print(int(\'14\', 8)) # 输出12
print(eval(\'0o14\')) # 输出12
print(\'{0:d}\'.format(0o14)) # 输出12

3. 十六进制转为十进制

print(int(\'10\', 16)) # 输出16
print(eval(\'0x10\')) # 输出16
print(\'{0:d}\'.format(0x10)) # 输出16

注意

hex()函数格式化字符串比format()慢,不推荐使用。

eval()函数比hex慢,不推荐使用。

3. 二进制、八进制以及十六进制之间的转换

  • 借助十进制
print(bin(int(\'0xf\', 16))) # 输出0b1111
  • 函数直接转换
print(bin(0xa)) # 输出0b1010
print(oct(0xa)) # 输出0o12
print(hex(0b1010)) #输出0xa

代码逻辑进制转换

class Jinzhi(object):
    \'\'\'
    # 输入特定进制的数实现进制转换
    # 输入/输出:仅二进制,八进制,十进制,十六进制相互转换
    # 要求
    # 十进制直接输入数字即可
    # 二进制0b
    # 八进制0o
    # 十六进制0x
    # 仅支持整数数字输入
    \'\'\'\'\'
    # 进制对应的字典
    jinzhi = {\'0b\':\'二进制\',\'0o\':\'八进制\',\'default\':\'十进制\',\'0\':\'十六进制\'}

    \'\'\'构造函数:用户输入:user_input_num,输出进制类型out(默认输出十进制)\'\'\'
    def __init__(self,user_input_num,out=\'10\'):
        if user_input_num == \'0\':
            return 0
        else:
            # 用户输入为字符串变量
            self.user_input_num = user_input_num
            self.out = out
            # 将数据统一转换为10进制
            self.user_format_data = eval(self.user_input_num)
            # 判断用户输入进制类型
            self.get_type()
            # 根据out进行进制输出
            jieguo = self.output_data(out)
            self.get_info(jieguo)

    # 根据前缀判断数字是哪种进制
    def get_type(self):
        # 看用户输入的字符串长度是否符合前缀要求
        if len(self.user_input_num)>2:
            #取用户输入字符串前缀
            head = self.user_input_num[0:2]
            if head == \'0b\' or head ==\'0B\':
                # 二进制前缀
                self.type = \'0b\'
            elif head == \'0o\' or head == \'0O\':
                # 八进制前缀
                self.type = \'0o\'
            elif head == \'0x\' or head == \'0X\':
                # 十六进制前缀
                self.type = \'0x\'
            else:
                self.type = \'default\'
        else:
            self.type = \'default\'

    # 根据out参数输出目标进制
    def output_data(self,out):
        if out == \'2\':
            self.out_jinzhi = \'二进制\'
            return \'{0:b}\'.format(self.user_format_data)
        elif out == \'8\':
            self.out_jinzhi = \'八进制\'
            return \'{0:o}\'.format(self.user_format_data)
        elif out == \'16\':
            self.out_jinzhi = \'十六进制\'
            return \'{0:x}\'.format(self.user_format_data)
        else:
            self.out_jinzhi = \'十进制\'
            return self.user_format_data

    # 信息打印
    def get_info(self,jieguo):
        print(\'-\'*50)
        print(\'您输入的数据:\'+self.user_input_num)
        print(\'它是:\'+ self.jinzhi[self.type]+\'数\')
        print(\'您希望输出的结果:\'+self.out_jinzhi+\'数\')
        print(\'输出结果是:\'+str(jieguo))
        print(\'-\'*50)

if __name__ == \'__main__\':
    jinzhi_obj = Jinzhi(user_input_num=\'7\',out=\'2\')
    jinzhi_obj = Jinzhi(user_input_num=\'1000\',out=\'8\')
    jinzhi_obj = Jinzhi(user_input_num=\'1000\',out=\'16\')

简易进制转换

# 获取用户输入十进制数
dec = int(input("输入数字:"))

print("十进制数为:", dec)
print("转换为二进制为:", bin(dec))
print("转换为八进制为:", oct(dec))
print("转换为十六进制为:", hex(dec))

分类:

技术点:

相关文章: