質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

5回答

1940閲覧

pythonで閏年でない場合の結果が表示されない

Cherry1217

総合スコア24

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/10 13:16

現在、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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

katoy

総合スコア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

Daregada

総合スコア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

keisuke0919

総合スコア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

y_shinoda

総合スコア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
otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問