在Python 3中转换为不同的位置表示法

3 投票
1 回答
1123 浏览
提问于 2025-04-17 19:15

我正在尝试写一个函数,目的是把一个数字从一种进制转换成另一种进制,比如从二进制转换到十六进制,甚至更高的进制。为了做到这一点,我首先需要把我输入的数字(以字符串形式给出)转换成十进制,这样后面的转换会更简单。

不过,我的函数似乎有个错误。

我现在的代码是:

def decimal(number, base1):
    number_dec = 0
    val = '0123456789abcdefghijklmnopqrstuvwxyz'

    if base1 != 10:
        for digit in number[::-1]:
            factor = val.find(digit)
            for exp in range(0, len(number)):
                number_dec += factor * base1 **exp
    else:
        number_dec = number
    return number_dec

如果我输入,比如:

decimal('4d2', 16)

这个函数返回的是'5187',而不是正确的'1234'。

错误出在哪里呢?

1 个回答

1

你需要对每一个数字都执行整个循环:

    for exp in range(0, len(number)):
        number_dec += factor * base1 **exp

如果你不需要自己去实现,可以直接使用内置的功能:

In [2]: int('4d2', 16)
Out[2]: 1234

撰写回答