Pythonのうるう年判定
Pythonのcalenderモジュールにうるう年判定が組み込まれているので、これを使うのが一番簡単。
Pythonのうるう年判定のサンプルコード
$ cat urucalender.py #!/usr/bin/python3 import calendar # 2022年から2030まで、閏年を判定表示 for i in range(2022,2030): if( calendar.isleap(i) ): print( i,"年はうるう年です" ) # 包括表記で、うるう年を2050年まで列挙 uru_list=[i for i in range(2022,2050) if calendar.isleap(i)] print( "うるう年の列挙リスト",uru_list )
2022年~2030年までのうるう年を表示して、さらに2022年~2050年までのうるう年の列挙リストを表示しています。
実行するとこうなります。
2024 年はうるう年です 2028 年はうるう年です うるう年の列挙リスト [2024, 2028, 2032, 2036, 2040, 2044, 2048]
4で割り切れる年をif判定する
プログラミングの学習サンプルでよく見かけるのが、年数を4で割り切れたら、うるう年と判定するというもの。
$ cat uruif.py #!/usr/bin/python3 # 2022年から2030まで、閏年を判定表示 for i in range(2022,2030): if( i % 4 == 0 ): print( i,"年はうるう年です" )
%はあまりを求める演算子です。
関連 Pythonのあまり
実行するとこうなります。
$ ./uruif.py 2024 年はうるう年です 2028 年はうるう年です
悪くはないのですが、開発現場では「うるう年判定が正常に動くかどうか」という余分なテストをするはめになるので、calenderモジュールを利用するほうが現実的だと思います。
うるう年列挙で判定する
構造的にはスマートではないですが、閏年を列挙して判定する方法もアリといえばアリ?今後せいぜい10年くらいしか使わないだろう…というプログラムなら使っても問題なさそう。
$ cat ururekkyo.py #!/usr/bin/python3 # 閏年を列挙 uruu_list=[2020,2024,2028,2032,2036,2040,2044,2048,2052] # 2022年から2030まで、閏年を判定表示 for i in range(2022,2030): if( i in uruu_list ): print( i,"年はうるう年です" )
実行するとこうなります。
$ ./ururekkyo.py 2024 年はうるう年です 2028 年はうるう年です
しかし、この手の手抜きが、かつて2000年問題を引き起こしたのを考えると、この方法はやめた方が良いのかも。
開発現場では、「動作しているソースコードをコピペして効率を上げる」(というか、ラクする)という行為が日常的に行われているので、遠い未来の開発者に迷惑をかける可能性があるんですね。COBOL全盛期時代にもよくおこなわれていました。
関連 COBOLの将来性と需要
少なくとも、開発現場でこんなコードが書かれていたらチェックが入りそうですね。
Pythonのうるう年まとめ
- Pythondeうるう年判定するならcalendarモジュール使用が無難
- if文で4で割ってあまりなしの年をうるう年判定してもよいが、その部分のテストが必要になる
- うるう年を列挙してテーブル化して判定すると、ソースコードのコピペで何十年も先に影響あるかも