TomoProgの技術書

底辺プログラマーが達人プログラマーになるまで

Pythonで閏年を判定してみた

皆さん
こんにちは、こんばんは
TomoProgです。

昨日、2月29日だった・・・
今年は閏年だ!!
というわけで、記念すべき20記事目はPythonを使って閏年を判定してみます。

それでは頑張っていきましょう。

閏年の判定方法

閏年というと4年に一度あるんだから4で割り切れる年が閏年だ!!
と考えてしまう人も多いと思うのですが、実は意外と複雑なんです。

  • 西暦が4で割り切れる年はうるう年
  • ただし、4で割り切れても100で割り切れる年はうるう年でない
  • ただし、100で割り切れても400で割り切れる年はうるう年

それでは、上記を踏まえてPython閏年判定プログラムを書いてみたいと思います。

閏年判定プログラムを書いてみる

さっそく閏年判定プログラムを書いてみました。

#-*- coding:utf-8 -*-

def check_leap_year(year):
    """ 閏年判定 """
    if year % 400 == 0:
        return True
    elif year % 4 == 0 and year % 100 == 0:
        return False
    elif year % 4 == 0:
        return True
    else:
        return False

def main():
    """ エントリーポイント """
    years = [2016, 2000, 1990, 1980]

    for year in years:
        if check_leap_year(year):
            print(str(year) + "年は閏年です。")
        else:
            print(str(year) + "年は平年です。")

if __name__ == "__main__":
    main()
実行結果:
2016年は閏年です。
2000年は閏年です。
1990年は平年です。
1980年は閏年です。

check_leap_year関数で閏年かどうかを判定し、閏年か平年かを出力するプログラムです。
実行結果を見る限り、閏年を正確に判定できているみたいです。

calendarモジュールで閏年を判定する

上記のように自分で閏年判定を実装してもよいですが、Pythonにはもっと簡単に閏年を判定する方法があります。

その方法がcalendarという標準モジュールを使う方法です。

実はcalendarモジュールには年を渡すと閏年かどうかを判定してくれるisleapという関数がすでに実装されています。

isleap関数を使った場合のプログラムを書いてみました。

#-*- coding:utf-8 -*-

import calendar

def check_leap_year(year):
    """ 閏年判定 """
    if calendar.isleap(year):
        print(str(year) + "年は閏年です。")
    else:
        print(str(year) + "年は平年です。")

def main():
    """ エントリーポイント """
    check_leap_year(2016)
    check_leap_year(2000)
    check_leap_year(1990)
    check_leap_year(1980)

if __name__ == "__main__":
    main()
実行結果:
2016年は閏年です。
2000年は閏年です。
1990年は平年です。
1980年は閏年です。

上記のプログラムと同じ結果が得られました!!
calendarモジュールを使った方が、短く簡単に書くことが出来ます。

まとめ

  • Python閏年を判定する際はcalendarモジュールのisleap関数が使える

今回はPython閏年の判定をしてみました。
次は30記事目指して頑張ります!!
それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter