Pythonでうるう年ループ

この記事を読むとPythonでの標準入力の使い方、プログラミングやその処理手順のアルゴリズムに出てくる「閏年(うるう年)」の扱い、リストにうるう年をリストに追加して指定の期間にうるう年が何回あったかをリストの長さを使って数える処理、西暦から和暦に変換する処理が学べます。

うるう年はプログラミングを学ぶ上で重要な基礎概念です。
是非この記事でマスターして行って下さい。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

Pythonの勉強を本格的に始めたのが令和3年2月21日で、この記事を書いているのは同年3月19日です。
もう少しで1ヶ月になろうとしている所です。
paizaラーニング さんというところで、勉強しています。
RPG風の動画講義に豊富な問題集、スキルチェックもあるので、お気に入りの学習サイトです。

この1ヶ月学んできたことをそろそろまとめながらアウトプットをしたいと思いました。

・IF文
・Forループ
・配列
・配列の末尾に追加

・西暦と和暦の変化

これらの復習が出来るサンプルを作りました。

Pythonを使って、開始年から終了年までのうるう年を調べて、和暦と対応付けます。
例えば、私が生れた1977年から、この記事を書いている2021年まで、うるう年が何回あったか、それは和暦と対応すると元号は何かの
一覧を作成しました。

まず、うるう年の定義ですが、

4で割れて且つ100で割れない、または400で割れる

になります。

2021年(令和3年)は4で割れないので、うるう年ではありません。
2100年は4で割れますが、100で割れるのでうるう年ではありません。

具体的に、1977年(昭和52年)から2021年(令和3年)までの期間のうるう年を見ていきます。
開始年に1977、終了年に2021を入力した実行結果です。

では、このプログラムを部分的に見ていきましょう。
標準入力で、開始年と終了年を入れるコードです。

#開始年の入力
print("開始年(西暦)=",end='')
ystart=int(input())

#終了年の入力
print("終了年(西暦)=",end='')
ylast=int(input())

次に、うるう年だった場合に配列arrayに追加する処理です。

#うるう年格納配列を用意
array=[]

#うるう年に該当する年を配列に格納する
for i in range(ystart,ylast+1):
    if (i%4==0 and i%100!=0) or i%400==0:
        array.append(i)

#配列の長さ、つまりうるう年があった数を数える
num=len(array)

この処理で、うるう年の条件に当てはまる、「4で割り切れて100で割れない」または、400で割れると言う条件が当てはまったら、その年を配列arrayに表示します。

また、len(array)で配列の長さを求めることによって、うるう年が何回あったのかをカウントします。

最後に西暦年から和暦に変換する処理です。
昭和は1926年からなので、西暦年から1925を引きます。
平成は1989年からなので、西暦年から1988を引きます。
令和は2019年からなので、西暦年から2018を引きます。

便宜上、 昭和64年と平成31年はそれぞれ平成と令和の元年に致しました。

for i in range(num):
    if array[i]>=1989 and array[i]<2018:
        heisei=array[i]-1988
        gengou=heisei
        wareki='平成'

    elif array[i]>=2019:
        reiwa=array[i]-2018
        gengou=reiwa
        wareki='令和'

    else:
        shouwa=array[i]-1925
        gengou=shouwa
        wareki='昭和'        
    
    print(str(array[i])+'年 ('+wareki+str(gengou)+')年')

print('\nこの間にうるう年は【'+str(num)+'】回ありました。\n')

最後に別の例と全体のコードを掲載します。
2010年から2040年までの例です。

全体のコードです。

#開始年の入力
print("開始年(西暦)=",end='')
ystart=int(input())

#終了年の入力
print("終了年(西暦)=",end='')
ylast=int(input())

#うるう年格納配列を用意
array=[]

#うるう年に該当する年を配列に格納する
for i in range(ystart,ylast+1):
    if (i%4==0 and i%100!=0) or i%400==0:
        array.append(i)

#配列の長さ、つまりうるう年があった数を数える
num=len(array)

print()
print('うるう年の西暦と和暦を表示します(=^・^=)mm。。。------>>\n')

for i in range(num):
    if array[i]>=1989 and array[i]<2018:
        heisei=array[i]-1988
        gengou=heisei
        wareki='平成'

    elif array[i]>=2019:
        reiwa=array[i]-2018
        gengou=reiwa
        wareki='令和'

    else:
        shouwa=array[i]-1925
        gengou=shouwa
        wareki='昭和'        
    
    print(str(array[i])+'年 ('+wareki+str(gengou)+')年')

print('\nこの間にうるう年は【'+str(num)+'】回ありました。\n')

うるう年については他の言語でも記事を書きました。
アセンブラ(フローチャート付き)
C言語

最後までお読みいただき、ありがとうございました(=^・^=)mm。。。

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)