Python で整数をローマ数字に変換する

Rohan Timalsina 2023年6月21日
  1. Python で整数をローマ数字に変換する
  2. Python で除算を使用して整数をローマ数字に変換する
Python で整数をローマ数字に変換する

ローマ数字は、次の 7つの記号を使用して表記されます。

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

これらの記号は、数千の数を表すために使用されます。

ローマ字で 20 を書くには、X を 2つ使って XX にします。 しかし、XXXX は 40 と等しくありません。

40のローマ数字はXLです。

同様に:

Symbol       Value
IV             4
IX             9
XL             40
XC             90
CD             400
CM             900

このチュートリアルでは、Python で整数をローマ数字に変換する方法を説明します。

Python で整数をローマ数字に変換する

以下は、与えられた整数を対応するローマ数字に変換する Python プログラムの実装です。

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


def into_roman(num):
    res = ""
    while num > 0:
        for i, r in roman_map:
            while num >= i:
                res += r
                num -= i
    return res


num = int(input("Enter a number: "))
print(into_roman(num))

出力:

Enter a number: 42
XLII

上記の例では、roman_map に対応する値と記号のリストが含まれています。 res は空文字列です。

num の値がゼロより大きい場合、while num > 0 はループを実行します。 ローマ数字にはゼロの記号はありません。

for i, r in roman_map は、最初の数値が見つかるまで、各 (integer, roman) ペアをループします。

コードの詳細な視覚化については、こちら のコードを実行してください。

Python で除算を使用して整数をローマ数字に変換する

次の例では、除算メソッドを使用して、ユーザーが入力した整数をローマ数字に変換します。

roman_map = {
    1: "I",
    4: "IV",
    5: "V",
    9: "IX",
    10: "X",
    40: "XL",
    50: "L",
    90: "XC",
    100: "C",
    400: "CD",
    500: "D",
    900: "CM",
    1000: "M",
}
num = int(input("Enter a number: "))

# 13 integers in descending order
order = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]

for i in order:
    if num != 0:
        quotient = num // i

        # prints the roman numeral if the quotient is not zero
        if quotient != 0:
            for j in range(quotient):
                print(roman_map[i], end="")

        # update input number with a remainder
        num = num % i

出力:

Enter a number: 42
XLII

このアプローチでは、入力整数を 13 の基本整数で降順に分割します。 roman_map は 13 の整数を含む辞書で、key:value のペアで対応するローマ数字を含みます。

num には、ユーザーが入力した整数が格納されます。 order リストには、13 個の整数が降順で格納されます。

入力数値は、商がゼロでなくなるまで、order リスト内のすべての数値で除算されます。

商がゼロではなく余りがある場合は、num で更新されます。 ループは引き続き実行され、同等のローマ数字が得られます。

この リンク で上記のコードを視覚化します。

これで、Python で整数を対応するローマ数字に変換する方法がわかったはずです。 このチュートリアルがお役に立てば幸いです。

著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

関連記事 - Python Integer