3

数値を特定の位置表記から選択した別の位置表記に変換できる関数を作成しようとしています。2 進数から* 16 進数 * 3 進数までです。そのためには、最初の数値 (文字列として指定) を 10 進数に変換して、さらに簡単に変換できるようにする必要があります。

しかし、私の機能には間違いがあるようです。

私が持っているもの:

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)

この関数は、正しい '1234' ではなく '5187' を返します。

間違いはどこですか?

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 に答える