10进制与其他进制之间互相转换(附源码)

进制转换是一个老生常谈的问题

此处我们只讨论正整数的进制转换,且最高支持16进制

话不多说,show me the code !

代码实现

class Scale_convert:
    '''
    进制转换 —— 10进制与其他进制互转
    暂时只讨论正整数,最高支持16进制
    '''
    def __init__(self):
        self.nums = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
        
    def from_ten_to(self, num: int, scale:int) -> str:
        '''
        从10进制转成其他进制
        :param num: 10进制数
        :param scale: 需要转换的目标进制
        :return:目标进制数
        '''
        if num == 0:
            return '0'
        res = []
        while num != 0:
            res_tmp = num % scale
            res.append(self.nums[res_tmp])
            num = num // scale
        return ''.join(res[::-1])

    def from_to_ten(self, src:str, scale:int) -> int:
        '''
        从其他进制转成10进制
        :param src: 需要转换的源进制
        :param scale:源进制
        :return: 10进制数
        '''
        sum = 0
        for i, j in enumerate(src[::-1]):
            sum += self.nums.index(j) * pow(scale, i)
        return sum


if __name__ == '__main__':
    s = Scale_convert()
    a = 0    #  需要转换的10进制数
    scale = 16  #  16进制
    b = s.from_to_ten(s.from_ten_to(a, scale), scale)
    #  若 a 与 b 不相等则会抛出 AssertionError
    assert a == b

小结

类 Scale_convert 主要就两个方法 —— 一个负责从10进制转成其他进制,另一个负责从其他进制转回10进制

代码末尾,使用了 assert(断言)来判断两个方法配合是否良好

此外,作为自定义模块以供日常使用也是个不错的主意

关于如何 import 自定义模块 ,请移步

 

评论或私信站长


  1. #该文章暂时没有评论