プログラミングには条件によって処理を変えたり、スキップしたりする機能があります。
「条件分岐」とか「フロー制御」などいろいろな言い方があり、そのコードを「条件文」「フロー制御文」などと呼びます。
プログラムは一連の命令を順番に処理していきますが、その順番通りに最後まで実行することはほとんどありません。
この条件文(フロー制御文)を用いて条件にしたがって、Pythonの命令を実行していきます。
if文、else文などから成り、「もし○○であればAを実行、そうでなければBを実行」というように条件(○○の部分)によって処理を変えます。
if文の書き方
if + 条件式 + :(コロン)
条件に当てはまった場合の処理
というように書きます。
下記の例では、age < 20 が条件式で、print部分が処理になります。
else文の書き方
elseは条件に当てはまらない場合の処理を書きます。
if文のあとに、
else + :(コロン)
条件に当てはまらなかった場合の処理
というように書きます。
ここで注意が必要です。IDLEの対話モードでは、通常どおり字下げ(インデント)するとエラーになってしまいます。
対話モードでelse(この後解説するelif)を書く場合は左詰めにしてください。IDLE独自の仕様ですので、あまり難しく考える必要はありません。>>>が無いものと考えればOKです。
elif文の書き方
if-else文は条件式に当てはまるか、当てはまらないかで処理を分岐しますが、ここに新たな条件を追加することができます。
「もし○○であればAを実行、△△であればBを実行、どちらにも当てはまらなければCを実行」のように書くことができます。
elifはいくつでも書くことができます。
if文のあとに、
elif + 条件式 + :(コロン)
前の条件に当てはまらず、elifのあ
との条件に当てはまる場合の処理
else + :(コロン)
いずれの条件にも当てはまらなかった場合の処理
というように書きます。
この場合も上から順に評価されていくというイメージを忘れないようにしましょう。
先ずはifの条件を見て、当てはまらなければ次のelifの条件を見て、当てはまったら処理を実行、当てはまらなければ次のelifの条件を見るか、elseの処理を実行します。
こうして見ると本当にPythonはコードの書き方がシンプルです。他の言語だともう少しややこしい書き方をします。やはり優れたプログラミング言語なんですね。
コードのブロックと字下げ(インデント)
IDLEの対話モードは字下げ(インデント)に関して少しややこしいところがありますが、基本的なルールは決まっています。
プログラミングのコードは1行以上のまとまりをブロックといいます。Pythonではひとつのブロックを記述している間は字下げ(インデント)することでブロック(ひとかたまりのコード)を表します。
Pythonは他のプログラミング言語に比べてこの字下げ(インデント)が重要な意味を持ちます(他のプログラミング言語は{ }でブロックを表現することなどが多いですが、Pythonではこの字下げでブロックを表現します)。
標準の字下げは半角4文字分です。全角にならないよう注意しましょう。
ちょっとややこしくなりますが、ブロックの中に他のブロックを入れることができ、この場合はさらに字下げを行います。
字下げがなくなるか、上の階層の字下げに戻ると、そのブロックは終了したことになります。
論理演算子(and, or, not)
条件分岐(フロー制御)のコードを書く場合、よく登場します。
条件を組み合わせる場合に使いますが、慣れるまで少し混乱するかもしれませんのでしっかり理解しましょう。
上の例で言えば、14以上、20未満であれば「子供ではありませんが、未成年です」と出力されるプログラムですが、これをage > 14 and age < 20と表現することができます。この場合どちらもTrueになるので、Trueと評価されます。
もしage = 13だったとしたら、False and TrueなのでFalseになります。
ややこしいですか?
andは「かつ」という意味なので、どちらもTrueならTrue、orは「または」を表しますのでどちらか一方がTrueならTrueとなります。
notは真偽値の値を反対にします。条件式にnotをつけるとTrueはFalseに、FalseはTrueになります(not True ==False)。
ややこしいですがそれほど難しいことではありません。慣れましょう。
まとめ
書き方はそれぞれ異なりますが、条件分岐(フロー制御)の考え方は、どのプログラミング言語でも基本的には同じです。
条件式は真偽値、つまりTrueかFalseで評価されます。
Trueなら処理を実行、Falseなら次の条件式に移行し、そこでTrueと評価されれば処理を実行、Falseなら、さらに次の条件式に移行を繰り返し、全部当てはまらなければelseの処理が実行されます。
文が長くなるととても分かりにくくなりますが、それぞれの条件式で真偽値をどう評価するのかを考えましょう。