Pythonでうるう年を決定する

Muhammad Adnan Ashraf 2023年6月21日
  1. うるう年の紹介
  2. Python で単純な if-else 構文を使用して閏年を決定する
  3. Python の Calendar モジュールを使用してうるう年を決定する
  4. Python の Calendar モジュールで条件演算子を使用して閏年を決定する
Pythonでうるう年を決定する

この記事では、うるう年として知られる用語について説明します。 また、特定の年がうるう年かどうかを確認する Python の実装についても説明します。

うるう年の紹介

地球が太陽の周りを一周するには、365 日よりも 6 時間多くかかります。

2 月に 1 日余分に追加しないとします (つまり、29 日)。 その場合、最終的には、さまざまな季節に多くの宗教的および政治的イベントが見られるようになります (日付は変わりませんが)。

6 x 4 = 24 として、4 年ごとに 1 日を追加することをお勧めします。 ただし、余分な 6 時間は正確ではないため、それほど単純ではありません。

地球は約 365 日 5 時間 48 分 46 秒で公転を完了し、前の箇所で説明したステートメントとは 11 分 14 秒違います。 この微妙な違いにより、日付を同じ季節に保つために、より複雑な計算を行う必要があります。

したがって、うるう年に該当する年は、次の条件を満たしている必要があります。

  1. 単純な失格: 検討中の年が 4 で割り切れない場合、うるう年の資格はありません。 たとえば、2077 年は 4 で割り切れないため (つまり、2077 % 4 != 0)、うるう年ではありません。
  2. 年が 4 で割り切れるが 100 で割り切れない場合、その年はうるう年になります。 たとえば、2024 年は 4 で割り切れますが、100 では割り切れません (つまり、2024 % 4 == 02024 % 100 != 0)。
  3. 数値が 4 と 100 で割り切れる場合は、その年が 400 で割り切れるかどうかを確認します。割り切れる場合、その年はうるう年になります。 そうしないと、その年はうるう年にはなりません。

たとえば、4000 は 4、100、400 で割り切れるので、閏年です。 数学的には、year % 4 == 0year % 100 == 0、および year % 400 == 0 の場合、その年は閏年です。

次のセクションでは、ある年がうるう年であるかどうかを判断する完全な Python 実装を提供します。 うるう年の概念を基本的に理解したら、さまざまな実装を見て、ある年がうるうかどうかを確認しましょう。

Python で単純な if-else 構文を使用して閏年を決定する

次の実装では、単純な if-else 構文を使用してうるう年を決定しています。

  1. 与えられた年の入力について、最初に 2 番目の条件が満たされているかどうかを確認します。 もしそうなら、肯定的な判断を示します (つまり、その年は閏年です)。
  2. 入力年が 3 行目の複合条件を満たさない場合、入力年が 3 番目の条件に従っているかどうかを確認し、それに応じて決定を表示します。
  3. ここで、年が上記の条件のいずれにも従わない場合、その年はうるう年ではないと結論付けます。

コード例:

yearValue = int(input("Enter a year: "))
# here, yearValue means the year we want to check.
if yearValue % 4 == 0 and yearValue % 100 != 0:  # condition 2
    print(yearValue, "is a leap year")
elif yearValue % 4 == 0 and yearValue % 100 == 0:  # condition 3
    if yearValue % 400 == 0:
        print(yearValue, "qualifies as a leap year")
    else:
        print(yearValue, "does not qualify as a leap year")
else:
    print(yearValue, "does not qualify as a leap year")  # Condition 1

ここで、異なる入力値を使用して、3つの条件のそれぞれでプログラムを評価します。

最初の条件を評価する出力:

Enter a year: 2027
2027 does not qualify as a leap year

2 番目の条件を評価する出力:

Enter a year: 2024
2024 is a leap year

3 番目の条件を評価する出力:

Enter a year: 4000
4000 qualifies as a leap year

Python の Calendar モジュールを使用してうるう年を決定する

Python の calendar モジュールは、日付に関する計算を実行するための信頼できるツールの 1つです。 これはヨーロッパの慣習に従い (つまり、月曜日を週の最初の日として表示します)、Python の Unix の cal プログラムに相当するものとして機能します。

日付の入力と操作 (カレンダーの表示を含む) を行うためのいくつかのユーティリティを提供します。 calendar モジュールが提供する機能の詳細なリストは、こちら にあります。

isleap() メソッドは calendar モジュールの機能の 1つです。 calendar モジュールと isleap() メソッドの使用法を理解するために、次の例を見てみましょう。

コード例:

import calendar

yearValue = int(input("Enter a year: "))
if calendar.isleap(yearValue):
    print(yearValue, "qualifies as a leap year")
else:
    print(yearValue, "does not qualify as a leap year")

上記のコードの最初の行は calendar モジュールをインポートします。 2 行目は、ユーザーから入力された整数の年を受け取り、それを yearValue 変数に割り当てます。

calendar.isLeap() メソッドは整数の年の値を取り、引数がうるう年であるかどうかにかかわらず true または false を返します。 したがって、意思決定ステートメントを適用して、パーソナライズされたメッセージを表示できます。

プログラムを異なる年で実行して、このコードをテストしてみましょう。

ファーストラン:

Enter a year: 2027
2027 does not qualify as a leap year

2 回目の実行:

Enter a year: 2024
2024 qualifies as a leap year

3 回目の実行:

Enter a year: 4000
4000 qualifies as a leap year

Python の Calendar モジュールで条件演算子を使用して閏年を決定する

条件演算子を calendar モジュールと組み合わせて、同じことを実現できます。 条件演算子は、単純な if-else 構造の代わりとして使用できる三項条件構造です。

コード例:

import calendar

y = int(input("Enter a year: "))

# [statement_on_True] if [condition] else [statement_on_false]
print(y, "is a leap year") if (calendar.isleap(y)) else print(y, "is not a leap year")

上記のコードは、条件演算子を使用して、年がうるう年かどうかを表示します。 条件演算子の構文は、4 行目のコードで十分にコメントされています。

いくつかの実行の出力:

ファーストラン:

Enter a year: 2027
2027 is not a leap year

2 回目の実行:

Enter a year: 2024
2024 is a leap year

3 回目の実行:

Enter a year: 4000
4000 is a leap year

calendar モジュールの使用をスキップしたい場合は、単純な複合条件を三項条件演算子と組み合わせて使用できます。

さらに、目的のプログラムを実装するための他の多くのオプションが存在します (たとえば、match-case コンストラクト)。 これは、オタクがさまざまなバリエーションを探索して実装できるようにします。

関連記事 - Python DateTime