質問: 0: print(target_year,"は閏年ではありません") leap_year_judgment(2000) ```
回答: たとえば、`2001`年の場合を考えてみましょう 1 `target_year % 400 == 0` この条件にはあてはまりません 2 `target_year % 4 == 0` この条件にもあてはまりません 3 `target_year % 100 == 0 and target_year % 400 == 0` この条件は、まず前半だけ考えましょう `target_year % 100 == 0` この条件にあてはまりません ということは、`and` なので、後半の条件を考えるまでもなく、あてはまりません 1, 2, 3 より、すべての条件にあてはまらないので なにも出力されません 閏年の判定のしかた 閏年の条件が示されていないので、 ここでの解説は次の Wikipedia の定義に従います > > 西暦年が4で割り切れる年は(原則として)閏年。 > > ただし、西暦年が100で割り切れる年は(原則として)平年。 > > ただし、西暦年が400で割り切れる年は必ず閏年。 > > > この「ただし」を `if` として実装します そして、条件に示されていない `else` を忘れないようにします ``` def leap_year_judgment(target_year): """ 閏年かどうかを判定する 西暦年が4で割り切れる年は(原則として)閏年。 ただし、西暦年が100で割り切れる年は(原則として)平年。 ただし、西暦年が400で割り切れる年は必ず閏年。 https://ja.wikipedia.org/wiki/%E9%96%8F%E5%B9%B4 """ if target_year % 400 == 0: print(target_year,"は閏年です") elif target_year % 100 == 0: print(target_year,"は閏年ではありません") elif target_year % 4 == 0: print(target_year,"は閏年です") else: print(target_year,"は閏年ではありません") leap_year_judgment(2000) leap_year_judgment(2001) leap_year_judgment(2004) leap_year_judgment(2100) ``` 実行結果: ``` $ python test.py 2000 は閏年です 2001 は閏年ではありません 2004 は閏年です 2100 は閏年ではありません ``` また、論理演算はベン図を書くと理解が深まるかもしれません