【数学】【PYTHON】10進数に変換する

これも

>>> int('0b11010', 2)
26
>>> int('0x1A', 16)
26

のようにint関数で計算してくれるのですが、

これもコードで書きます。

import sys
import re

args = sys.argv

def aby2dec(target, m):
    n = len(target) - 1
    sum = 0

    for i in range(len(target)):
        alpha_search_result = re.search('[A-F]', target[i])
        if alpha_search_result:
            num = ord(alpha_search_result.group()) - 55
        else:
            num = int(target[i])
        sum += (m ** n) * num
        n -= 1
    return sum

print(aby2dec(args[1], int(args[2])))

サンプルコードでは[A-F]をif文でベタ書きしていたのですが、

ここでは正規表現とASCIIコードで取得するようにしました。

演算子**で階乗計算できるんですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください