Python でローマ数字を整数に変換する
- Python でローマ数字を整数に変換する
- Python でローマ数字を整数に変換する Python プログラム
- Python 辞書を使用して Python でローマ数字を整数に変換する
- Python Roman モジュールを使用して Python でローマ数字を整数に変換する
- まとめ
子供の頃、私たちは皆、ローマ数字を整数に変換する方法を学びました。 さて、私たちがプログラマーになったら、これを行う Python プログラムを作成しましょう。
この記事では、Python を使用してローマ数字を整数に変換する方法を学習します。
Python でローマ数字を整数に変換する
実際のコードに飛び込む前に、ローマ数字を整数に変換する規則を修正しましょう。 特定の整数に使用される基本的な記号は次のとおりです。
Integer Roman Numeral
1 I
5 V
10 X
50 L
100 C
500 D
1000 M
与えられたローマ数字の文字列から整数の対応する値を見つけることができることを知っています。 しかし、そうするときは、いくつかの規則に従わなければなりません。
-
与えられたローマ数字の文字列について、左から右に移動する際に、記号の値が減少するか同じままである場合、それらに相当する整数を加算して、最終的な答えを整数として取得します。
XVII X - 10 V - 5 I - 1 I - 1 10 + 5 + 1 + 1 = 17
上記の例では、値は左から右に減少します。 したがって、それらをすべて加算すると、整数値として 17 が得られます。
-
与えられたローマ数字の文字列について、左から右に移動する際に記号の値が増加する場合、大きな値から小さな値に相当する整数を減算して、最終的な答えを整数として取得します。
XL X - 10 L - 50 50 - 10 = 40
上記の例では、値は左から右に増加します。 したがって、それらを減算して、整数値として
40
を取得します。
ローマ数字を整数に変換するコードを作成する際には、これら 2つの規則を覚えておく必要があります。 また、辞書以外にも、ローマ数字を整数に変換する方法がいくつかあります。
それらを1つずつ見てみましょう。
Python でローマ数字を整数に変換する Python プログラム
ローマ数字を整数に変換する最も簡単な方法は、if
ステートメントを使用して基本的なローマ記号を格納することです。 これが同じコードです。
# function to store the basic roman symbols
def map_symbols(s):
if s == "I":
return 1
if s == "V":
return 5
if s == "X":
return 10
if s == "L":
return 50
if s == "C":
return 100
if s == "D":
return 500
if s == "M":
return 1000
return -1
# function to perform the conversion
def change_roman_to_int(roman):
ans = 0
i = 0
while i < len(roman):
x1 = map_symbols(roman[i])
if i + 1 < len(roman):
x2 = map_symbols(roman[i + 1])
if x1 >= x2:
ans = ans + x1
i = i + 1
else:
ans = ans + x2 - x1
i = i + 2
else:
ans = ans + x1
i = i + 1
return ans
# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))
出力:
Enter the roman numeral: MLXVI
The integer equivalent is:
1066
このコードの動作を見てみましょう。
入力としてローマン文字列を入力すると、変数 r
に格納され、関数 change_roman_to_int
に渡されます。 この関数内で while
ループを使用して、文字列全体を反復処理します。
さらに、while
ループが各値を処理するとき、while
ループ内の if-else
ステートメントは次の処理を行います。
- 現在のシンボルの値が次のシンボルの値以上の場合、現在の値が変数
ans
に追加されます。 - それ以外の場合、次のシンボルの値が変数
ans
に追加され、現在の値がそこから減算されます。
これは基本的に、このコードがどのように機能するかです。
Python 辞書を使用してローマ数字を整数に変換する別の方法を見てみましょう。
Python 辞書を使用して Python でローマ数字を整数に変換する
ここでも、基本的な考え方は変わりません。 唯一の変更点は、if
ステートメントの代わりに、辞書を使用してローマ数字とそれに対応する整数値を保存することです。
これが同じコードです。
# function to convert roman numeral into an integer
def change_roman_to_int(roman):
# dictionary to store the roman-integer values
map_symbols = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
ans = 0
for i in range(len(roman)):
if i > 0 and map_symbols[roman[i]] > map_symbols[roman[i - 1]]:
ans += map_symbols[roman[i]] - 2 * map_symbols[roman[i - 1]]
else:
ans += map_symbols[roman[i]]
return ans
# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))
出力:
Enter the roman numeral: MMMCMLXX
The integer equivalent is:
3970
for
ループまたは while
ループを使用して入力文字列を反復処理できることに注意してください。どちらも同様に機能するためです。
以下のコードのように、辞書で enumerate
関数を使用することもできます。
# function to convert roman numeral into an integer
def change_roman_to_int(roman):
# dictionary to store the roman-integer values
map_symbols = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
ans = 0
l = len(roman)
for (i, v) in enumerate(roman):
if i < l - 1 and map_symbols[v] < map_symbols[roman[i + 1]]:
ans -= map_symbols[v]
else:
ans += map_symbols[v]
return ans
# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))
出力:
Enter the roman numeral: MCMXCIV
The integer equivalent is:
1994
辞書には 7つの基本的なローマ字記号のみを追加しています。 カスタム シンボルを追加すると、コードをさらに簡素化できます。
以下のコードを見てください。
# function to change a roman numeral into an integer
def change_roman_to_int(roman):
custom_symbols = {"IV": -2, "IX": -2, "XL": -20, "XC": -20, "CD": -200, "CM": -200}
map_symbols = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
ans = 0
for i in roman:
ans += map_symbols[i]
for i in range(len(roman) - 1):
merge = str(roman[i] + roman[i + 1])
if merge in custom_symbols:
ans += custom_symbols[merge]
return ans
# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))
出力:
Enter the roman numeral: MCMXCIV
The integer equivalent is:
1994
このコードの巧妙さに驚きませんか? このコードがどのように機能するか見てみましょう。
change_roman_to_int
関数内には、2つの辞書があります。通常の 7つの値を持つ map_symbols
辞書と、ローマ字のペアに対応する負の値を持つ custom_symbols
辞書です。
さらに、最初の for
ループは、すべてのローマ字記号の整数値を加算し、合計を変数 ans
に格納します。 このステップは次のようになります。
MCMXCIV
M = 1000, C = 100, M = 1000, X = 10, C = 100, I = 1, V = 5
1000 + 100 + 1000 + 10 + 100 + 1 + 5 = 2216
ans = 2216
次に、2 番目の for
ループが roman 文字列を繰り返し処理し、一度に 2つのシンボルを取得して変数 merge
に文字列として格納します。 この for
ループ内の if
ステートメントは、マージされたペアが辞書 custom_symbols
に存在するかどうかをチェックします。
見つかった場合、対応する負の値が変数 ans
に追加されます。 このステップは次のようになります。
MC - Not found
CM - Found
ans = 2216 + (-200)
ans = 2016
MX - Not found
XC - Found
ans = 2016 + (-20)
ans = 1996
CI - Not found
IV - Found
ans = 1996 + (-2)
ans = 1994
これは基本的に、このコードがどのように機能するかです。
私たちは長い間このコードを書いてきました。 それでは、座って Python に仕事をさせましょう。
Python Roman モジュールを使用して Python でローマ数字を整数に変換する
Python を使用していて、ローマ数字を整数に変換する関数を備えたモジュールが存在する必要があることを知らないでしょうか? さて、そのモジュールは roman
と呼ばれています。
このモジュールをダウンロードするには、cmd で次のコマンドを実行します。
pip install roman
出力:
Downloading roman-3.3-py2.py3-none-any.whl (3.9 kB)
Installing collected packages: roman
Successfully installed roman-3.3
モジュールがインストールされると、上記のメッセージが表示されます。
これで、このモジュールをコードにインポートし、関数 fromRoman()
を使用して任意のローマ数字を整数に変換できます。
import roman
x = roman.fromRoman("MCMXCIV")
print(x)
出力:
1994
Python の roman
モジュールの詳細については、この リンクを参照してください。
まとめ
この記事では、Python でローマ数字を整数に変換する非常に興味深い方法をいくつか見てきました。 これを実現するために、Python の if
ステートメントと Python 辞書を使用しました。
また、ローマンペアに負の値を使用して、コードをより簡単かつ短くする方法についても調べました。 最後に、fromRoman()
関数を使用してローマ数字を整数に変換する Python の roman
モジュールの使用を見ました。