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”となります。