【Python閏(うるう)年】ループと西暦と和暦の変換

この記事を読むとことで、

・うるう年をIF文と剰余演算子%で判定

・Forループ


・リスト


・リストの末尾に要素を追加


・西暦と和暦の対応

の概要が掴めます。

うるう年はプログラミングを学ぶ上で重要な論点です。

Pythonのコードで、開始年から終了年までの間のうるう年を調べて、和暦と対応付けます。

例えば、私が生れた1977年から、この記事を書いている2025年まで、うるう年が何回あったのか、その年の西暦と和暦の対応を付けて元号も表示出来ます。

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

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

になります。

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

具体的に、1977年(昭和52年)から2025年(令和7年)までの期間のうるう年を見ていきます。

標準入力を使って、開始年に1977、終了年に2025を入力します。
まず、標準入力で、開始年(yearStart)と終了年(yearLast)を入力するコードです。

#開始年の入力
print("開始年を西暦で入力して下さい -->>",end="")
yearStart=int(input())

#終了年の入力
print("終了年を西暦で入力して下さい -->>",end="")
yearLast=int(input())

次に、うるう年だった場合にリストleapArrayに追加するコードです。

この処理で、うるう年の条件に当てはまる、「4で割り切れて100で割れない」または、400で割れると言う条件が当てはまったら、その年をリストleapArrayに追加します。

リストに追加する部分のコードです。

leapArray.append(i)

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

#開始年の入力
print("開始年を西暦で入力して下さい -->>",end="")
yearStart=int(input())

#終了年の入力
print("終了年を西暦で入力して下さい -->>",end="")
yearLast=int(input())

#うるう年を格納するリストを用意
leapArray=[]

#ループでうるう年に該当する年をリストに格納する
for i in range(yearStart,yearLast+1):
  if (i%4==0 and i%100!=0) or (i%400==0):
    leapArray.append(i)

#リストの長さはうるう年が合った回数になる
num=len(leapArray)


#うるう年が追加されたリストを表示させる
for year in leapArray:
  print(year)

print("うるう年は【"+str(num)+"】回ありました。")

ここまでの実行結果です。

最後に西暦年から和暦に変換する処理を行います。

昭和は1926年からなので、西暦年から1925を引きます。
平成は1989年からなので、西暦年から1988を引きます。
令和は2019年からなので、西暦年から2018を引きます。

西暦が格納されたyearから必要な年数を引いた分を変数japanに格納します。

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

#開始年の入力
print("開始年を西暦で入力して下さい -->>",end="")
yearStart=int(input())

#終了年の入力
print("終了年を西暦で入力して下さい -->>",end="")
yearLast=int(input())

#うるう年を格納するリストを用意
leapArray=[]

#ループでうるう年に該当する年をリストに格納する
for i in range(yearStart,yearLast+1):
  if (i%4==0 and i%100!=0) or (i%400==0):
    leapArray.append(i)

#リストの長さはうるう年が合った回数になる
num=len(leapArray)


#うるう年が追加されたリストを西暦と和暦で表示する
for year in leapArray:
  if year>=2019:
    japan=year-2018
    wareki="令和"

  elif year>=1989 and year<2019:
    japan=year-1988
    wareki="平成"

  else:
    japan=year-1925
    wareki="昭和"  
    
  print(str(year)+"年 "+"("+wareki+str(japan)+"年)")

print("うるう年は【"+str(num)+"】回ありました。")

実行結果です。

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

お疲れ様でした。ブレイクタイムPhotoは、

いたばし花火大会2025です。

ご精読誠にありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

【Python並び替え】リストと辞書を昇順・降順|sortとsortedで[Alexandros]の曲の長さ順に表示

この記事を読むことで、

リストと辞書を昇順・降順に並べ替える

・リストを並べ替えるsort

・辞書を並び替えるsorted

の概要が掴めます。


具体例として、[Alexandros]というバンドの曲の中でも特にお気に入りの曲を用います。

今回使用する曲のリストです。

4:08 ワタリドリ 
3:15 FamousDay
4:27 RunAway
4:46 SNOW SOUND

これをこの様なリストを作ってみました。

DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

下記のコードで、このまま出力してみます。
ループを使って見やすくしております。

#曲の入ったリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print("そのまま出力")
for music in DROS:
  print(music)

このコードの出力結果です。


では、このリストを昇順にします。

DROS.sort()

ここまでのコードと実行結果です。

#曲の入ったリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print("そのまま出力")
for music in DROS:
  print(music)

#ここでリストを昇順にしている
DROS.sort()

print("【昇順】で出力")
for music in DROS:
  print(music)


次に、このリストを降順にしてみます。
降順の書式はこの様になります。

DROS.sort(reverse=True)

では、降順の出力は、この様に書きます。

reverseはデフォルトでは、Falseになっています。
これをTrueにすることによって、リストを降順にしています。

ここまでのコードと実行結果です。

#曲の入ったリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']


print("そのまま出力")
for music in DROS:
  print(music)


#ここでリストを昇順にしている
DROS.sort()

print("【昇順】で出力")
for music in DROS:
  print(music)


#ここでリストを降順にしている
DROS.sort(reverse=True)

print("【降順】で出力")
for music in DROS:
  print(music)

それでは、辞書での並び替えについて掲載致します。
この様な辞書を作りました。

dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}

まずは、そのまま出力するコードと実行結果です。

#曲の入った辞書
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}

print("そのまま出力")
for (time,music) in dict_DROS.items():
  print(time,music)

では、同様に辞書を昇順にしてみます。

リストと異なる点はsortedを使うことと、newやitems()も使うことによって昇順にする点です。

new_dict_DROS=sorted(dict_DROS.items())

上記を簡単に書くと、並び替えたい辞書を新しい辞書に代入して、その新しい辞書を出力しています。

コードと実行結果です。

#曲の入った辞書
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}

print("そのまま出力")
for (time,music) in dict_DROS.items():
  print(time,music)

#ここで辞書を昇順にしている
new_dict_DROS=sorted(dict_DROS.items())

print("【昇順】で出力")
for (time,music) in new_dict_DROS:
  print(time,music)

今度は辞書を降順にしてみます。この様にコードを追記します。
こちらもreverseをTrueにします。

new_dict_DROS=sorted(dict_DROS.items(),reverse=True)

コードと実行結果です。

#曲の入った辞書
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}

print("そのまま出力")
for (time,music) in dict_DROS.items():
  print(time,music)

#ここで辞書を昇順にしている
new_dict_DROS=sorted(dict_DROS.items())

print("【昇順】で出力")
for (time,music) in new_dict_DROS:
  print(time,music)

#ここで辞書を降順にしている
new_dict_DROS=sorted(dict_DROS.items(),reverse=True)

print("【降順】で出力")
for (time,music) in new_dict_DROS:
  print(time,music)

今度歌ってみたい曲です。

お疲れ様でした。ブレイクタイムPhotoは、

千葉県にある房総半島、外房の御宿の海です。
透明度が高い海が魅力ですね。

ご精読誠にありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

モバイルバージョンを終了