Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

if else文を理解しやすくなる基礎知識

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

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

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

if 文のみで動くコード

# -*- coding: utf-8 -*-
x = 3
if x >= 3:
    print("大きい")
# 出力結果: 大きい

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

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

一番基本的&コンパクトなif else

上記を踏まえて以下のサンプルコードを見ていきましょう。 少し長くなったとはいえ、それでも5行です。

# -*- 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ではifelseの間にelifが入ります。これで条件を3つ以上に増やすことができます。

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

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

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

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

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

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

# -*- 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ですと表示するプログラムを書きたい」、と想定して以下のようなプログラムを書いたとしましょう。しかし、これは意図するものとは違う結果がでます。

# -*- 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に等しい) という条件をまず始めに持ってこなければいけません。よって意図と同じ動作をするプログラムは以下のようになります。

# -*- 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がおすすめです。

このサイトにまるっとコードをコピペしてページ上部の「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 -*-の部分がなくても日本語を認識してくれるようになっています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした