3

我正在尝试编写一个函数,该函数允许我将数字从某个位置符号转换为另一种选择,从二进制一直到 * hexa *trigesimal 基数。为了做到这一点,我首先需要能够将我的初始数字(以字符串形式给出)转换为十进制数,以便进一步转换。

但是,我的功能似乎有一个错误。

我有的:

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”。

错误在哪里?

4

1 回答 1

1

您为每个数字执行整个循环:

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

如果您不必自己推出,则可以使用内置工具:

In [2]: int('4d2', 16)
Out[2]: 1234
于 2013-03-15T19:16:13.253 回答