Python实现任意进制间的转换 简单通俗易懂版本

写在前面:

最近在学习数据分析方向的课程,开始系统地学习Python,越来越对“人生苦短,故我用python”这句话有感触了,Python在某些方面确实有其过其他语言之处。它简洁的语法也让我着迷(cpp & java:我不要面子的吗?)

此外,通过这一学期的学习,希望我可以把代码写的更加美观(回头看看自己大一写的代码,真的是又水又丑,再看看现在大一学弟们的代码,真是惭愧了!)。有空一定要把《代码整洁之道》拿来好好拜读一下。也希望有幸看到的读者能给我提提建议,大家一起学习,共同进步!

正文:

进制转换是非常简单以及基础的内容,非常适合用来做语言熟悉度训练。此外用Python做进制转换的优势有至少以下两点:

  1. Python具有任意精度的整数,因此没有真正的固定最大值。你只受到可用内存的限制。 所以可以不限位数的进行转换进制,而如果使用cpp则需要用数组模拟。
  2. 把其他进制转为10进制时很方便,可以用Python内置好的函数int()
代码:
S = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
#  方便字符转换(超过十进制)

# m进制ton进制 (m进制到10进制,10进制到n进制)
"""
    function declaration:
    :mhex_to_dec(m, origin): m进制到10进制
    :dec_to_nhex(n, origin): 10进制到n进制
    :mhex_to_nhex(m, n, origin): m进制到n进制
"""


def mHex_to_dec(origin, m):
    """

    :param m: Hex(进制, 类型int)
    :param origin: the num to be converted(待转换的数, 类型为str)
    :return: num in Dec(十进制数,类型为str)
    """
    return str(int(origin, base=m))


def dec_to_nhex(origin, n):
    """

    :param n: target Hex(目标进制,类型int)
    :param origin: the num to be converted(待转换的数,类型为str)
    :return: num in nHex(n进制数, 类型str)
    """
    origin = int(origin)
    List = []
    while origin // n:
        List.append(S[origin % n])
        origin //= n
    List.append(S[origin])
    List.reverse()
    List = [str(each) for each in List]  #  把list里的每个int转为str,方便后面join
    return ''.join(List)


def mhex_to_nhex(origin, m, n):
    """

    :param m: origin Hex(原进制,类型int)
    :param n: target Hex(目标进制,类型int)
    :param origin: the num to be converted(待转换的数, 类型str)
    :return: num in nHex(n进制数,类型str)
    """
    dec_num = mHex_to_dec(origin, m)  # type(dec_num) = int
    return dec_to_nhex(dec_num, n)  # return's type: str


if __name__ == '__main__':
    mm, nn = map(int, input().split())  # 在同一行输入当前进制,目标进制
    num_str = input()  # 在第二行输入当前进制下的数
    print(mhex_to_nhex(num_str, mm, nn)) if num_str[0] != '-' else print('-'+mhex_to_nhex(num_str[1::], mm, nn))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值