見出し画像

アラビア数字をローマ数字に変換するPythonコードを作ろう!(難易度⭐️)

リンク先↓のnotebookを参考に、chatGPTが書きました。

ローマ数字とは


ステップ・バイ・ステップで学ぶ!Pythonでアラビア数字をローマ数字に変換しよう

Pythonを学び始めたみなさん、こんにちは!今回は、とても楽しい実践的なコードの演習として、アラビア数字(1, 2, 3のような数字)をローマ数字(I, II, IIIのような数字)に変換する方法を学んでいきます。もし、こういった変換をPythonで自動化できたら便利だと思ったことがあれば、このガイドが役に立つでしょう!
このガイドは初心者向けなので、Pythonを始めたばかりの方も安心してください。一緒にコードを一つ一つ解説しながら進めていきますので、終わる頃には、自分で数字をローマ数字に変換する関数を作れるようになっています!

ローマ数字とは?

まず、ローマ数字について簡単におさらいしましょう。ローマ数字は、ラテンアルファベットの文字を組み合わせて数字を表現する方法です。以下がその基本です:

  • I = 1

  • V = 5

  • X = 10

  • L = 50

  • C = 100

  • D = 500

  • M = 1000

ただし、ローマ数字は単純に1対1で対応するわけではありません。たとえば、4IIII ではなく IV9IX と表記します。このように、ローマ数字には少し特別なルールがあるため、少し工夫が必要です。

いよいよコードを書こう!

ステップ1:ローマ数字対応表を作成する

最初に、アラビア数字とローマ数字の対応表を作ります。これは、タプルのリストとして作成し、アラビア数字とそれに対応するローマ数字をペアにします。


roman_numerals = [
    (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')
]

このように、大きい数字から小さい数字の順に並べることで、変換するときに大きな数字から順番に確認できるようにします。

ステップ2:シンプルな変換を試してみよう

次に、このリストをループで回して、指定したアラビア数字が正しくローマ数字に変換されるかを確認してみましょう。


arab_num = 9
for arabic, roman in roman_numerals:
    if arab_num == arabic:
        print(arabic, roman)

これを実行すると:


9 IX

おお、ちゃんと動いていますね!

ステップ3:引き算しながら変換してみよう

次に、アラビア数字から対応するローマ数字を引き算し、その分だけローマ数字を結果に追加する方法を試してみましょう。これは、買い物をするときに大きな硬貨からお金を払うようなイメージです。
たとえば、14を変換する場合は次のようになります:


number = 14  # 変換したいアラビア数字
for arabic, roman in roman_numerals:
    if number >= arabic:
        number -= arabic
        print(roman, "残り:", number)

出力結果は:


X 残り: 4
IV 残り: 0

おお、正しく14が XIV に変換されました!

ステップ4:結果を文字列に追加しよう

次に、ローマ数字をどんどん結果に追加していくコードを書いてみます。


number = 14  # 変換したいアラビア数字
result = ""
for arabic, roman in roman_numerals:
    if number >= arabic:
        number -= arabic
        result += roman
        print(roman, "残り:", number)
print(result)

これを実行すると:


X 残り: 4
IV 残り: 0
XIV

完璧です!これで14がローマ数字 XIV に正しく変換され、結果は result という変数に保存されます。

ステップ5:繰り返しに対応するためのループ

次に、8のように同じローマ数字が何度も繰り返される場合を考えましょう。この場合、if 文を while 文に置き換えて、条件が満たされている限り何度でもローマ数字を追加できるようにします。


number = 8  # 変換したいアラビア数字
result = ""
for arabic, roman in roman_numerals:
    while number >= arabic:
        number -= arabic
        result += roman
        print(roman, "残り:", number)
print(result)

これを実行すると:


V 残り: 3
I 残り: 2
I 残り: 1
I 残り: 0
VIII

これで、8が正しく VIII に変換されましたね!

ステップ6:関数としてまとめよう

ここまでで、ほぼすべてが揃いました。最後に、このコードを再利用可能な関数にまとめてみましょう。


def convert_to_roman(number):
    # ローマ数字とアラビア数字の対応表
    roman_numerals = [
        (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')
    ]

    result = ""
    for arabic, roman in roman_numerals:
        while number >= arabic:
            number -= arabic
            result += roman
    return result

これで convert_to_roman(number) という関数を呼び出せば、好きな数字をローマ数字に変換できます!

関数をテストしてみよう

いくつかの数字でテストしてみましょう。

print(convert_to_roman(9))   # IX と表示されるはず
print(convert_to_roman(14))  # XIV と表示されるはず
print(convert_to_roman(78))  # LXXVIII と表示されるはず

まとめ

おめでとうございます!これでアラビア数字をローマ数字に変換する関数が完成しました。この演習を通して、ループや条件分岐、文字列操作などの基本的なPythonのスキルをしっかりと学べたと思います。さらに、実用的で楽しいコードを作ることができました!
これからもどんどんPythonを練習して、いろいろなプロジェクトに挑戦してみてください。学ぶ楽しさを忘れずに、一歩一歩進んでいきましょう!
では、ハッピーコーディング!😊

最後に

この記事の課題は、私が師と仰ぐ、
「かめ@米国データサイエンティスト」 さんのコミュニティーの中の coding_challenge の課題を参考にしています。


いいなと思ったら応援しよう!