これも
>>> 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コードで取得するようにしました。
演算子**で階乗計算できるんですね。