Python

【Python】代表的な練習問題!閏年を判定するプログラムの作成


閏年(うるう年)を判定するプログラムの作成はプログラミング初心者がほぼ必ず取り組む課題ですが、この課題で躓いてしまうケースも珍しくないです。

この記事では、そんなプログラミング初心者のために閏年の判定プログラムの作成方法について解説します。

そもそも閏年(うるう年)とは?

まずは閏年について簡単に説明します。

閏年とは何か?

閏年とは、季節と暦のズレを補正することを目的に作られた年のことです。閏年は通常の年より日数が一日多くなっています。(通常の年は2月が28日間、閏年では29日間)

どのように判定するのか?

閏年は以下の定義に従って判定することが可能です。

  • 西暦年が4で割り切れる場合は閏年
  • ただし、西暦年が100で割り切れる場合は通常の年
  • ただし、西暦年が400で割り切れる場合は必ず閏年

参考までに閏年、通常の年の例を以下に示します。

例)閏年
1904年、1944年、2000年、2012年、2020年

例)通常の年
1900年、1945年、2001年、2013年、2021年

実際にプログラムを作成してみる

それでは実際に閏年の判定を行うプログラムを作成してみます。

プログラム作成の手順

ここでは、以下の手順で処理を実装します。

  1. 利用者に数値(西暦年)を入力させる
  2. 前述したルールに従い、閏年の判定を行う

実装例

上記の手順に従ってプログラムを作成します。使用する言語はPythonです。

if __name__ == "__main__":

    # 値を入力させる
    input_num = input("西暦年を入力して下さい:")
    year = int(input_num)

    # 条件式に従い、閏年の判定を行う
    if year%4==0:
        if year%100==0:
            if year%400==0:
                print("{}年は閏年です。".format(year))
            else:
                print("{}年は閏年ではありません。".format(year))
        else:
            print("{}年は閏年です。".format(year))
    else:
        print("{}年は閏年ではありません。".format(year))

このプログラムを実行すると以下の出力結果が得られます。

西暦年を入力して下さい:2020
2020年は閏年です。

出力結果から適切に処理を実行できていることがわかります。

より「読みやすいプログラム」へ

先程のプログラムでも十分に処理を実行できますが、よりも可読性の高いプログラムにする余地もあります。最後にその方法について紹介して、終わろうと思います。

コツ:条件式を整理する

閏年の判定は対象の数値を前述したルールに当てはめるだけです。しかし、前述のルールをそのままif文に書くだけではプログラムが煩雑になってしまいます。

そのため、プログラムを作成する前にルールを整理しておくことが望ましいです。

例えば、以下のように「対象の年が閏年である」場合で整理すると作成したプログラムが簡潔にまとまります。

  • 400で割り切れる場合は閏年
  • 4で割り切れ、かつ100で割り切れない場合は閏年

実装例

上記の手順に従ってプログラムを作成します。使用する言語はPythonです。

if __name__ == "__main__":

    # 値を入力させる
    input_num = input("西暦年を入力して下さい:")
    year = int(input_num)

    # 条件式に従い、閏年の判定を行う
    if year%400==0 or ( year%4==0 and year%100!=0 ):
        print("{}年は閏年です。".format(year))
    else:
        print("{}年は閏年ではありません。".format(year))

このプログラムを実行すると以下の出力結果が得られます。

西暦年を入力して下さい:2020
2020年は閏年です。

出力結果からこちらのプログラムも適切に処理を実行できていることがわかります。

処理の中身はそのままにより簡潔な見た目になっているため、個人的にはこのようなプログラムの書き方を推奨します。