現在、pythonで簡易的な閏年判定プログラムを作成しています。
以下プログラムで、結果が閏年の場合は、print文が実行されるのですが、
閏年ではない場合にprint文が実行されません。
表示されないのは、何か条件が足りていないからでしょうか?
ご教授のほどよろしくお願いします。
python
1#閏年かどうかを判定する 2def leap_year_judgment(target_year): 3 if target_year % 400 == 0: 4 print(target_year,"は閏年です") 5 elif target_year % 4 == 0: 6 print(target_year,"は閏年です") 7 elif target_year % 100 == 0 and target_year % 400 == 0: 8 print(target_year,"は閏年ではありません") 9 10leap_year_judgment(2000)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
python
1if 条件1: 2 処理1 3elif 条件2: 4 処理2 5 6処理X
この場合. まず 条件1をチェックして成立すれば処理1 をおこなってから処理X をおこないます。
条件1 が成立しないかったら、条件2をチェックします。
成立したら、処理2 をおこなってから処理X を行います。
成立しなければ、処理X だけを行います。
if .. elsf ... の場合、チェックする条件の順番は重量です。
また最後に else を書くか書かないかも重要です。
この点に注意して質問文のコードを見直す、多の回答のコードを研究すると良いです。
投稿2020/07/10 22:41
総合スコア22324
0
閏年になる条件をまとめると、
- 400で割り切れる
- 4で割り切れ、かつ100で割り切れない
のいずれかになります。
これを条件式として書けば、以下のようになります。
Python
1def leap_year_judgment(target_year): 2 if target_year % 400 == 0 or (target_year % 4 == 0 and target_year % 100 != 0): 3 print(target_year, "は閏年です") 4 else: 5 print(target_year, "は閏年ではありません")
投稿2020/07/10 17:50
総合スコア11990
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
python
1elif target_year % 100 == 0: 2 print(target_year,"は閏年ではありません")
上記の部分のprint
が作用するための条件を見ると、
python
1elif target_year % 100 == 0 and target_year % 400 == 0:
となっています。
これは、100で割り切れて、さらに400でも割り切れると言うことです。
このような条件の数字が引数に代入されたとしても、それ以前の
python
1if target_year % 400 == 0:
や
python
1elif target_year % 4 == 0:
で、動作してしまうので、閏年ではない判定の出力が出ないのだと思います。
おそらく100でも400でも割り切れない
と言う条件を実装しようとしてらっしゃるのだと推測しますので、「イコールでない」を表す!=
を用いて
python
1elif target_year % 100 != 0 and target_year % 400 != 0: 2 print(target_year,"は閏年ではありません") 3
と実装されるか、もしくは単に、それまでのいずれの条件にも一致しないものと言う条件のelse
を用いて、
python
1else: 2 print(target_year,"は閏年ではありません")
と実装されるといいと思います。
投稿2020/07/10 13:36
総合スコア34
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
たとえば、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
を忘れないようにします
python
1def leap_year_judgment(target_year): 2 """ 3 閏年かどうかを判定する 4 西暦年が4で割り切れる年は(原則として)閏年。 5 ただし、西暦年が100で割り切れる年は(原則として)平年。 6 ただし、西暦年が400で割り切れる年は必ず閏年。 7 https://ja.wikipedia.org/wiki/%E9%96%8F%E5%B9%B4 8 """ 9 if target_year % 400 == 0: 10 print(target_year,"は閏年です") 11 elif target_year % 100 == 0: 12 print(target_year,"は閏年ではありません") 13 elif target_year % 4 == 0: 14 print(target_year,"は閏年です") 15 else: 16 print(target_year,"は閏年ではありません") 17 18 19leap_year_judgment(2000) 20leap_year_judgment(2001) 21leap_year_judgment(2004) 22leap_year_judgment(2100)
実行結果:
console
1$ python test.py 22000 は閏年です 32001 は閏年ではありません 42004 は閏年です 52100 は閏年ではありません
また、論理演算はベン図を書くと理解が深まるかもしれません
投稿2020/07/10 13:32
総合スコア3272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
閏年の条件を知っていますか?
・4で割れれば閏年
・しかし100で割れれば閏年で無い
・でも400で割れればやっぱり閏年
・4で割れない場合は閏年じゃ無い
の4パターンです。3パターンではありません。
あと、条件判断の順番もおかしいです。どの条件から先にチェックすべきかよく考えましょう。
あるいは、4条件を並列じゃなくて、上記の通りにコーディングするのも手です。
Python
1 if target_year % 4 == 0: 2 if arget_year % 100 == 0: 3 if arget_year % 400 == 0: 4 print(target_year,"は閏年です") 5 else: 6 print(target_year,"は閏年ではありません") 7 else: 8 print(target_year,"は閏年です") 9 else: 10 print(target_year,"は閏年ではありません")
投稿2020/07/10 13:25
編集2020/07/10 13:43総合スコア85901
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。