2018.11.07いよいよ、中学生のゆうちゃんとの勉強会もif文に突入しました。if文は状況によって命令の内容を変化させる命令文です。2つのデータを比較して、どちらが大きいかによって、その後の命令を変化させます。命令文の形はシンプルなので、「習うより慣れよ」です。例文をいくつか読めば、使い方がわかってくると思います。ゆうちゃんとのPython勉強会は継続していますが、中間や期末テストがあったりして、あっというまに時間が過ぎていきます。友達と遊ぶのにも忙しいようだし、覚えるのも早いけれど、忘れるのも早いのが中学生です。一進一退ではありますが、継続することが1番です。早く、プログラミングが面白いと思えるところまで、引き上げてあげたいと思います。if文、for文、配列までは進まないと、面白いことを見つけるのが大変ですね~。モンスターガチャ私が実際に購入した教材のご紹介0.ゆうちゃんとPythonシリーズこの記事は「ゆうちゃんとPythonシリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。中学生のゆうちゃんとPythonシリーズなお、それぞれの記事は、シリーズの中でそれまでに習った文法を使ってサンプルコードを考えています。実際には、もっと、効率のよい書き方があるかもしれませんが、ご了承ください。0は計算できず、オーバーフローを起こしてエラーになります。このように、数行のプログラムならエラーになるのはすぐにわかりますが、複雑なプログラムでは、想定外のことで分母がゼロになり、システムがシャットダウンすることも考えられます。x)そんな場合には、コード02のようなif文を入れるのも解決法の1つです。0)ならば、4~5行目の命令を実行します。ここで、if文の影響範囲である4~5行目は、文の始まりが他の行よりも下がっていることに注意してください。xがゼロの時だけ実行されるのは4~5行目であり、6行目はif文の影響範囲ではありません。6行目はxの値がゼロであっても、なくても実行されます。文の始まりを他の行よりもさげることを字下げ(インデント)と言います。コード02は、xがゼロのとき、そのことを4行目のprint文で出力し、プログラム利用者に想定外のことが生じたことを知らせます。そのうえで、5行目でゼロを0.000001に置き換えることで、ゼロで割ることを防ぎ、計算を続行することができます。0なので、x=0.000001にしました。0なので、x=0.000001にしました。2000000.0if文は、以下のような書式になっており、「条件式」が正しいときにだけ、その後のコードを実行します。「条件式が正しいときに実行する命令文」の範囲は、行の始めに半角スペースを挿入し、字下げ(インデント)します。条件式が正しいときに実行する命令文(複数行でも可)if文を記述するときの注意点は以下のとおりです。条件式のあとにコロン(:)をつける。条件文が正しい時に実行する範囲は字下げ(インデント)しますが、字下げ幅(インデント幅)がバラバラではダメです。インデント幅をそろえなければなりません。後述しますが、コード04のように、if文の中にif文があるといった場合には、インデント幅が更に下がる部分があっても問題ありません。インデントには半角スペースとタブを使うことができますが、全角スペースを使うことはできません。インデントには半角スペースを4つ使うことが推奨されており、タブの使用は推奨されていません。0:」となっています。これは、間違えて2回イコールを記述したのではありません。この「==」は、左辺の「x」と右辺の「0」を比較する演算子なので、「比較演算子」と言います。0:」としてしまい、苦労しています。エラーに格闘しているときに「いつものやつ、いつものやつ」と言うと気が付き、「わかってたもんね~」と負け惜しみを言いながら修正します。文末の「:」と「==」は、慣れるまで大変です。0」は、右側の0を左側のxに代入する「代入演算子」ですが、3~4行目の「==」は比較演算子です。比較演算子で比較されている式は、正しいときには「True」(トゥルー)、誤りの場合は「False」(フォールス)を返します。したがって、コード03の出力は出力03になります。0」という「式」をprint()で出力すると、Trueという「値」が出力されるのがおもしろいですね。1)#出力03TrueFalseつまり、if文は「条件式がtrueの場合には、if文直後のインデントされた範囲を実行し、falseならば、実行しない」という命令文なのです。False)を返す演算子を比較演算子といいます。比較演算子は、下表の他にもいくつかありますが、まずは以下の6種類で十分です。aがb以上である比較演算子を使う場合の注意点は以下のとおりです。「==」は「=」と間違えないようにしましょう。「!=」「<=」「>=」が正解です。「=!」「=<」「=>」のように「=」を左にするとエラーになります。※Python♪の神様式暗記法として、「=」を箸(はし)にみたて、「箸は右手で持つ」と覚えましょう。数学の知識ですが、上表の「bよりも小さい」「bよりも大きい」はbが入りません。「b以下」「b以上」はbが入ります。x」とすればよいですが、「xが3よりも大きく、かつ、6以下」という条件式はどの様にすればよいのでしょうか。if文の中にif文を記述する方法2つ以上の条件を組み合わせる方法として、if文の中にif文を記述する方法があります。具体例を見た方が分かりやすいと思いますのでコード04を見てください。x」の場合に4行目を実行します。4」のときに5行目を実行します。4」の場合に5行目を実行することができます。3行目のif文の影響範囲は、3行目よりもインデント幅が大きい4~5行目です。4行目のif文の影響範囲は、4行目よりもインデント幅が大きい5行目です。4:」の影響範囲も示す必要がありますので、その部分はさらにインデント幅を大きくする必要があり、4行目と5行目はインデント幅がそろいません。論理演算子を用いる方法2つ以上の条件を組み合わせるもう1つの方法として、論理演算子を用いる方法があります。6」と記述しています。「and」は日本語では「かつ」です。6)」のようにカッコをつける必要はありません。2」とする場合には、コード06やコード07のようになります。ベン図にすると以下のようになります。条件B」は論理積と呼ばれ、下図の左側のように、条件A、条件Bの両方の条件を満たす黄色の部分がTrueとなります。条件B」の意味であり、条件Aと条件Bのどちらか一方でも満たせばTrueになります。条件A」は「条件Aではない」ときにTrueとなります。ベン図は高1で習う内容ですが、イメージしやすい(?)ので、先取りしちゃいましょう。Cがすべて正しい(True)の場合はTrue。1つでも誤りがあるとFalse。4」のような使い方をします。2」はTrueになります。Cの内、1つでも正解(True)がある場合はTrue。全て誤りの場合はFalse。A」→「AがTrue」なら「AがTrueではない」つまり「False」になります。「AがFalseではない」つまり、「True」になります。notは、TrueとFalseを逆にします。論理演算子の優先順位2つ以上の論理演算子を使う場合の優先順位はnot→and→orとなります。※Python♪の神様式暗記法として、頭文字をとって「Naoちゃん」と覚えましょう。B」のような場合に、どのような順番で計算するのか注意する必要があります。正しい計算順序と、誤った計算順序を以下に示します。B)論理演算を行う場合は、文法的にはつける必要がなくても、カッコをつけた方が分かりやすいことが多いと思います。状況に応じて、読みやすいコードの記述に心がけましょう。else」については、次の記事で説明したいと思いますので、ここまでの内容をまとめたいと思います。if文の書式if文の書式は以下の通りです。条件式がTrueの場合に、if文の後の字下げされた部分を実行します。条件式がFalseの場合には、if文の後の字下げされた部分は実行されません。条件式のあとにコロン(:)をつける。条件文が正しい時に実行する範囲は字下げ(インデント)しますが、字下げ幅(インデント幅)がバラバラではダメです。インデント幅をそろえなければなりません。コード04のように、if文の中にif文があるといった場合には、インデント幅が更に下がる部分があっても問題ありません。インデントには半角スペースとタブを使うことができますが、全角スペースを使うことはできません。インデントには半角スペースを4つ使うことが推奨されており、タブの使用は推奨されていません。False)を返す演算子を比較演算子といいます。比較演算子は、下表の他にもいくつかありますが、まずは以下の6種類で十分です。「==」は「=」と間違えないようにしましょう。「!=」「<=」「>=」が正解です。「=!」「=<」「=>」のように「=」を左にするとエラーになります。※Python♪の神様式暗記法として、「=」を箸(はし)にみたて、「箸は右手で持つ」と覚えましょう。上の表の「bよりも小さい」「bよりも大きい」はbが入りません。「b以下」「b以上」はbが入ります。複数の条件式を組み合わせて、より複雑な条件式を記述するには論理演算子を使います。ベン図にすると以下のようになります。2つ以上の論理演算子を使う場合の優先順位はnot→and→orとなります。※Python♪の神様式暗記法として、頭文字をとって「Naoちゃん」と覚えましょう。比較演算子は論理演算子よりも計算の優先順位が高くなります。以下のようなプログラムを組んでみましょう。点数の評価ランダムに0~100の整数を発生させ、その点数を出力する。次に、その点数が50点よりも小さい場合にだけ、点数が0点以上、50点未満であることを示し、悪い点であったことを出力する。出力の書式は、出力例1、出力例2を参照すること。100)は、0~100までの整数の乱数を発生させる関数です。4行目は点数にかかわらず、出力されますが、6~7行目は、点数が50より低いときにだけ出力されます。print('悪い点でした。モンスターガチャ例題1が、あまりにもつまらないので、例題2では、モンスターガチャのプログラムを作ってみましょう。このプログラムに過度の期待をしてはいけませんが、「ゆうちゃん」いわく、「超クソゲーなのに、なぜか楽しいプログラム」だそうです。スピード」があり、それぞれ、0~100の整数で表されるゲームがあるとします。プログラムでは、それぞれの能力値をランダムに決め、まず、その能力を出力します。次に3つの能力値の合計が50以下の場合は、「ちょっと、弱すぎますね・・・」と出力し、250以上の場合は、「超レア!リセマラ完了」と出力します。「超レア」がでるまで、ひたすらプログラムの実行を繰り返すというゲーム(?)です。解答を表示するプログラムのコードは以下の通りです。例題1の行数が少しだけ多くなっただけなので、難しくないのではないでしょうか。print('ちょっと、弱すぎますね・・・')意外に「超レア」が出ないので、ガチャを引いている気分になれます。モンスターの能力値を出力するだけのプログラムですが、5分ぐらいは楽しめました。ゆうちゃんも「クソゲー、クソゲー」と連呼しながらも、すごく楽しそうでした。例題1の「テストの点数」を「モンスターの能力値」にするだけで、わくわく感が変わるのが不思議です。ちなみに、「超レア」が出る確率は、以下の通りです。計算内容の詳細説明は省略します。