Pythonで数字をローマ数字表現に変換する関数

Pythonで数字をローマ数字表現に変換する関数

以下は、Pythonで数字をローマ数字に変換する関数の例です。

def int_to_roman(num):
    val = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
    syb = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
    roman_num = ''
    i = 0
    while num > 0:
        for _ in range(num // val[i]):
            roman_num += syb[i]
            num -= val[i]
        i += 1
    return roman_num

# テスト
number = 123
roman = int_to_roman(number)
print(f"{number} のローマ数字表現は {roman} です。")

この関数は、num という整数を受け取り、それを対応するローマ数字に変換して返します。テストの部分では、number が123の場合を表示しています。このコードを実行すると、数字123が”CXXIII”として表示されます。他の数字に対しても同様に利用できます。

解説

コードの主要な要素を解説します。

変換に使用する数値と対応するローマ数字のリスト:

val = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
syb = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]

val リストは、変換に使用するアラビア数字の値を大きい順に含んでいます。syb リストは、それぞれのアラビア数字に対応するローマ数字を持っています。

変換関数 int_to_roman:

def int_to_roman(num):
    roman_num = ''
    i = 0
    while num > 0:
        for _ in range(num // val[i]):
            roman_num += syb[i]
            num -= val[i]
        i += 1
    return roman_num

この関数は、アラビア数字 num を受け取り、それを対応するローマ数字に変換します。while ループが、num が0になるまで変換を繰り返します。内部の for ループは、num が val[i] で割り切れる回数だけ、対応するローマ数字を結果の文字列 roman_num に追加し、num を減少させます。

テスト:

number = 123
roman = int_to_roman(number)
print(f"{number} のローマ数字表現は {roman} です。")

この部分は、テストとして number が123の場合を表示しています。

このアルゴリズムのキーは、大きい順に対応するアラビア数字を引いていくことで、最適なローマ数字表現を得ることです。例えば、123は100より大きいので”C”が含まれ、次に20より大きいので”XX”が含まれ、最後に3が含まれているので”III”が結合されて”CXXIII”となります。

コメントを残す

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