うるう年の判定をまとめてみよう

学習の目的

  • 判定を論理演算子を使ってまとめる

うるう年の判定をまとめてみよう

うるう年を判定する条件をまとめるとアルゴリズムがもっと単純になります。

うるう年を判定するアルゴリズムを考えましたが、「うるう年」や「平年」と表示する処理が複数ありましたね。

アルゴリズムを工夫すると、同じ表示は1つにまとめることができます。

論理演算子を使うのですね。

そうです。まとめると次のようなフローチャートになります。

論理演算子を使えば、1つの条件でできるんだ!

1つの条件式で実は表すことができるのです。

1つになれば、出力も1つずつなのでシンプルですよね。

もう一度、うるう年を判定するための条件を確認しましょう。

うるう年の判定条件

  • 条件1 4年ごとにうるう年
  • 条件2 100年ごとにうるう年ではなく平年
  • 条件3 400年ごとにうるう年

この条件1~条件3を1つにまとめて④の条件として記述します。

複数の条件をまとめるためには、条件式は何を使いますか?

and、or、not の論理演算子です。

なるほど、論理演算子を使って3つの条件をつなげればよいのか!

そうです。どの論理演算子を使うかは、条件を日本語で考えるとわかりやすいので、文章で条件を考えていきましょう。

条件1と条件2をどのようにつなげるか考えます。

条件1で4で割り切れるかどうかを確認しています。うるう年は必ず4で割り切れます。4で割り切れる数は4、8、12、・・・96、100、104・・・で 100 も4で割り切れる数です。

条件2で100で割り切れない場合はうるう年ということなので、4で割り切れる数のうち100で割り切れない西暦年がうるう年ということになります。

4で割り切れる数のうち100で割り切れない数を条件で表すと「かつ」ですか「または」ですか?

4で割り切れて、その中で100で割り切れない値だから「かつ」だと思います。

「4で割り切れて かつ 100で割り切れない」

しっくりくるからこれだと思います。

「かつ」だから「and」ですか?

はい、「かつ」で正解です。ですから「and」でつなぎます。

条件1と条件2を「and」で囲むと次のようになります。

西暦年が4で割り切れる and 西暦年が100で割り切れない

この条件に条件3を付け足します。
条件3は「400で割り切れればうるう年」という条件です。

ただし、400で割り切れてしまえば、うるう年になります。ということは、「西暦年は400で割り切れてもよいし、割り切れなくても4で割り切れ かつ 100で割り切れない」という条件になります。

この場合は条件でつなぐ場合は「かつ」ですか「または」ですか?

これは、どちらでもよいから「または」です。

西暦年が「400で割り切れる または 4で割り切れる かつ 100で割り切れない」がまとめた条件ですか?

よくできましたね。本当は必須ではありませんすが、( )を付けるともっとわかりやすいと思います。

西暦年が「(400で割り切れる) または (4で割り切れる かつ 100で割り切れない)」

少しわかってきた気がする。

フローチャートの④に入る条件は下記のようになります。

西暦年が400で割り切れる or 西暦年が4で割り切れる and 西暦年が100で割り切れない。

それでは、フローチャートの④に入る条件式を完成させましょう。

④にあてはまる条件式を記述してください。

続いて、Pythonのプログラムで④の条件部分を完成させて実行してみましょう。

year = 2000
if(    ⓸    ):
  print("うるう年")
else:
  print("平年")

条件式を整理してまとめて記述すると、アルゴリズムもシンプルに記述できることもあります。

条件はよく考えて効率の良いアルゴリズムを作るように心がけましょう。

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる