【Python】 N進法→10進法変換

■N進法→10進法変換

N進法を10進法へ変換する方法は以下の通りである

例:
①3進法の値、1201を10進法へ変換

②4進法の値、231を10進法へ変換

③16進法の値、FFを10進法へ変換(※)

(※)なお、16進法の場合、10進法の10から15は以下のアルファべットで表記される。

■サンプルコード

今回は16進法までの変換を前提とする

# -*- coding: UTF-8 -*-

# アルファベットを数字に変換する関数(16進法まで)
def Check_A_To_Num(num:str) -> str:
    if num == 'A':
        return '10'
    elif num == 'B':
        return '11'
    elif num == 'C':
        return '12'
    elif num == 'D':
        return '13'
    elif num == 'E':
        return '14'
    elif num == 'F':
        return '15'
    else:
        return num

# N進法を10進法に変換する関数
def ChangeNTo10(num:str, N:int) -> int:
    # 引数「num」をlist関数にて1文字ずつに分割し配列に格納
    # 例:'1201'→['1', '2', '0', '1']
    before_num = list(num)
    # 初期値をセット
    after_num = 0

    # ループ処理(1から配列の要素数+1まで)
    for i in range(1, len(before_num) + 1):
        # アルファベットを数字に変換する関数(16進法まで)を呼び出し変数に格納
        # -iを使用し、リストの逆順(1の位)から要素を取得
        tmp_num = str(Check_A_To_Num(before_num[-i]))
        # 計算処理(各位の値をN進法から10進法に変換)
        tmp_cal = int(tmp_num)*(N ** (i - 1))
        # 各位の値をを合算
        after_num = after_num + tmp_cal

    return after_num


# メイン処理
if __name__ == '__main__':
    str_num = '1201'
    N = 3
    print(ChangeNTo10(str_num, N))

    str_num = '231'
    N = 4
    print(ChangeNTo10(str_num, N))

    str_num = 'FF'
    N = 16
    print(ChangeNTo10(str_num, N))

■実行結果

46
45
255

■ちなみに・・・

N進法→10進法変換はpythonのint関数でも変換可能

int('文字列', N進法)

・サンプルコード

print(int('1201', 3))
print(int('231', 4))
print(int('FF', 16))

・実行結果

46
45
255

コメント

タイトルとURLをコピーしました