[コピペで使えるコード付き] Pythonのif else文を理解する

# `if else`文を理解しやすくなる基礎知識
まずは、`if else`文を理解しやすくする基礎知識として`if`文をおさらいしましょう。条件分岐の一番シンプルなコードが`if`文です。

条件分岐とは「Aであればaを実行する、Bであればbを実行する」というふうに、ある条件を設定してその条件に合えばその中に書かれている指示を実行し、合っていなければ別の指示を実行する命令文です。

次のコードを見てください。

**if 文のみで動くコード**

```Python
# -*- coding: utf-8 -*-
x = 3
if x >= 3:
    print("大きい")
# 出力結果: 大きい
```
たった2行の小さなプログラムです。 xに3が代入されているので、このコードの出力結果は「大きい」となります。もしxが2や1であれば、出力結果には何も表示されません。なぜならxが3より小さい場合の処理を指示していないからです。

3以下の場合の処理を指示したい場合は本記事のテーマであるif else文で書きます。

# 一番基本的＆コンパクトな`if else`文
上記を踏まえて以下のサンプルコードを見ていきましょう。 少し長くなったとはいえ、それでも5行です。

```Python
# -*- coding: utf-8 -*-
x = 1
if x >= 3:
    print("大きい")
else:
    print("小さい")
# 出力結果: 小さい
```
これで、x に1が代入されると「小さい」と表示されるようになりました。

このサンプルコードを改変して動かしたい時は、例えば 以下のように変えてみましょう。

- xに代入する数を2や5にしてみる。
- `if x >= 3:`のイコール （=）を削除する。 
- print()で表示する文を「これは3より大きいです」「これは3より小さいです」などとしてみる。

ここまでが`if else`文の解説でした。しかしあともう一つ`if else`文から派生した文があります。それが`if elif else`文です。

# `if elif else`文
`if elif else`では`if`と`else`の間にelifが入ります。これで条件を3つ以上に増やすことができます。

コードを書いてみましょう。

```Python
# -*- coding: utf-8 -*-
x = 3
if x > 3:
    print("大きい")
elif x == 3:
    print("大きくもなく小さくもなく")
else:
    print("小さい")
# 出力結果: 大きくもなく小さくもなく
```

このコードでは3つの条件を設定しています。

１. xが3より大きいとき、「大きい」と出力する
2. xが3ぴったりなとき、「大きくもなく小さくもなく」と出力する
3. 上記1と2以外のとき、「小さい」と出力する

これまで`if`と`else`は、1回ずつしか出てきませんでしたが、`elif`は`if`と`else`の間であれば、何度でも連続して使うことができます。

次のコードを見てください。 このコードには`elif`が2つ入っています。

```Python
# -*- coding: utf-8 -*-
x = 4
if x > 5:
    print("大きい")
elif x == 5:
    print("これは5です")
elif x == 4:
    print("これは4です")
else:
    print("小さい")
# 出力結果: これは4です
```

ただしelifを使う時に注意すべき点があります。それは`if elif else`文に限らないのですが、**コードは上から下へと順番に読み込まれ処理される**ということです。

つまりプログラムの処理の流れとして、上から下に順々に対象を絞り込んでいくのです。

たとえば「`x = 10`であれば`これは10です`と表示するプログラムを書きたい」、と想定して以下のようなプログラムを書いたとしましょう。しかし、これは意図するものとは違う結果がでます。

```Python
# -*- coding: utf-8 -*-
x = 10
if x > 8:
    print("大きい")
elif x > 5:
    print("これは5より大きいです")
elif x == 10:
    print("これは10です")
else:
    print("小さい")
# 出力結果: 大きい
```

このプログラムの問題点は以下です。

- 「8より大きければ」「5より大きければ」と、比較する数を大きいものから小さく絞っていく流れを切り「10と等しければ」という条件を設定していること。

プログラムの処理の流れは**条件が真となった時点で、そこで指示された処理を実行し終了する**という動作になっています。

つまりこのプログラムでは「`if x > 8:`が真だ！ じゃあ大きいと出力してプログラムを終了しよう」とコンピューターが判断しそれ以降のプログラムは処理しないのです。これでは困ります。

このプログラムの意図として「xに10を入れているから "これは10です" と表示したい」と言うのであれば、 `x == 10` (xが10に等しい) という条件をまず始めに持ってこなければいけません。よって意図と同じ動作をするプログラムは以下のようになります。

```Python
# -*- coding: utf-8 -*-
x = 10
if x == 10:
    print("これは10です")
elif x > 8:
    print("大きい")
elif x > 5:
    print("これは5より大きいです")
else:
    print("小さい")
# 出力結果: これは10です
```
# Pythonの実行環境を持っていない方におすすめのサイト
実際にコードを動かして、自分で色々改変すると、Pythonのコード理解がより深まります。

PycharmやJupyter Notebookなどの開発環境をすでに持っていればそれがベストですが、「Pythonの開発環境を構築する気はまだないけど、実際にコードを動かしたり書き換えたりしてみたい！」という方は[Online Python Compiler](https://www.tutorialspoint.com/execute_python_online.php)がおすすめです。

このサイトにまるっとコードをコピペしてページ上部の「Execute」ボタンを押せば、すぐに出力結果を返してくれます。コードの編集もできるので、「ここを変えたらどうなるんだろう」という場合もすぐに書き換えて出力することが可能です。 ただし、ここで使われているバージョンは`Python2.7.13`なので古めですf^^;
(2018年10月現在Python3.7.0が最新)

# 【注意！】Python2系で動かす方またはOnline Python Compilerを使う方
`# -*- coding: utf-8 -*-`も忘れずにコピペしてください。この部分を忘れると日本語が認識できずに以下のようなエラーが出ます。
```
SyntaxError: Non-ASCII character '\xe5' in file main.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
```

Python3では、`# -*- coding: utf-8 -*-`の部分がなくても日本語を認識してくれるようになっています。