コンピュータのプログラムは、どんなに複雑そうにみえるプログラムでも、細かく分解すれば次の3つの単純な構造の組み合わせで構成されています。
- 処理を上から順番に一つずつ実行する (順次処理)
- 条件によって処理を選択する (分岐処理)
- 条件が満たされている間、処理を繰り返す (反復処理)
シンプルなプログラムは、上から下へ順番に実行していく順次処理ですが、複雑な処理を作ろうとするといろいろな条件を判定し、適切な処理(分岐処理)を行う必要がでてきます。
ここでは「条件によって処理を選択する (分岐処理)」について書いていきます。
条件によって処理を選択するには、その条件についての判定を行う必要があり、判定するために「比較」を行います。
比較演算子
比較演算子とは値を比較するための演算子で、比較の結果はブール型(TrueかFalse)になります。
演算子 | 条件 |
a < b | a は b より小さい |
a <= b | a は b と等しいか、bより小さい |
a > b | a は b より大きい |
a >= b | a は b と等しいか、bより大きい |
a == b | a と b は等しい |
a != b | a と b は等しくない |
この表の「条件」を満たした場合に、比較の結果は True となり、条件を満たしていない場合は False となります。
文字列の比較
文字列も数値と同じように==や<といった比較演算子で比較することができます。
==演算子は文字列が同じかを判定し、文字列がまったく同じであった場合に True を返します。
文字列を比較した場合は、文字の種類などで比較結果が変わります
- 数字は、文字の0が最小、9が最大(0 < 1 < 2 < … < 9)
- アルファベットでは、a が最小、z が最大 (a < b < c < … < z)
- 大文字は小文字より小さい (A < a, B < b, …)
- 数字は、アルファベットよりも小さい (0 < 9 < A)
if 文 による条件分岐
比較演算子を使って比較を行うのは、比較の結果によって処理を切り替えるためで、その処理の分岐は if 文を使って行います。
a = 1 if a > 0: # <-- この行が if 文の行です print("aの値は0より大きい")
if 文以下の行では、if 文で条件式の結果がTrueとなったときに処理が実行され、条件式の結果がFalseのときは実行されません。
if 文の書き方として、以下のような決まりがあります。
- if 文は条件式を書いた後に’:'(コロン)が必要となります。
- if 文以下の条件式で True となったときの処理は、スペース文字(4つのスペース文字を入れることが多いです)を入力して記述します。
- 条件が True となったときの処理を、複数行続ける場合にはこのスペース文字の文字数は同じにしなければいけません。
この「スペース文字などを入れて段付けして処理を記述すること」をインデントと言います。
else 節
else 節は、if 文による条件分岐で条件式の結果がFalseのときに実行されます。if 文の結果で処理が変わるものなので、else 節だけで使用することはなく、必ず if 文と対になります。
else 節以下の行は、if 文と同様にインデントを行う必要があります。また、else節はif 文の条件式の結果がTrueの時には実行されないので、下記のように記述した場合に
if 条件式: 処理A else: 処理B
「処理A → 処理B」と連続で実行されることはありません(ループ処理などで複数回処理を行うときに条件式の結果が変わったときには「処理A → 処理B」と処理されることがありますが、これは1度の処理で「処理A → 処理B」が行われているわけではありません)。
比較以外の条件式
条件式の記述は、比較演算子だけではなくその結果がブール型(TrueかFalse)で表されるものであれば、関数呼び出し結果などで条件式として使うことができます。
str = "123" if str.isdecimal(): print("数字です") else print("数字ではありません")
elif 節
if 文、else 節で条件式の結果に基づいて処理が実行され、if 文、else 節を組み合わせることで条件分岐を表現することはできるのですがif 文、else 節だけだと、複数の条件を判定するときにプログラムが複雑になってしまうことがあります。
例)テストで100点の人は「すばらしい!」、75点から99点までの人は「合格」、25点から74点までの人は「まずまずですね」、10点から24点までの人は「残念」、10点より少ない人は「勉強しようね」という判定処理を書くときに、if 文と else 節だけだとこのようなコードになります。
if score >= 100: print("すばらしい!") else: if score >= 75: print("合格") else: if score >= 25: print("まずまずですね") else: if score >= 10: print("残念") else: print("勉強しようね")
これでもわからなくはないのですが、インデントが深い(ネストといいます)のでコードは読みづらくなります。
こういったことを避けるために、elif 節というものがあります。
上記と同じコードを、elif 節を用いて作ると、下記のようになります
if score >= 100: print("すばらしい!") elif score >= 75: print("合格") elif score >= 25: print("まずまずですね") elif score >= 10: print("残念") else: print("勉強しようね")
elif 節も else 節と同様、インデントを行う必要があります。そして、else 節と併用する場合は、else 節より前に記述する必要性があります(elif 節を else 節の後ろに記述すると構文エラーとなります)。