10. 条件分岐(IF文)

図解!Python if文の徹底解説(not・and・orによる複数条件指定、elif・elseの条件分岐、入れ子など)

更新日:

Python3におけるif文使い方を初心者向けに解説した記事です。if文の定義方法や注意点、elif・elseを使った条件分岐、論理演算子(and・or・not)による複数条件や否定条件の指定方法など、if文についてはこれだけを読んでおけば良いよう、徹底的に解説しています。
 
if文とは、条件に従って処理を分岐させるために使われるものです。
 
if文の条件式では数値や文字列などのオブジェクトの持つ値が等しいかどうかや大きいか小さいかを調べてTrue(条件に当てはまる)又はFalse(条件に当てはまらない)を返します。そしてTrueの時に処理を実行することになります。
 

Pythonでのif文の記述方法

if文の記述方法は以下になります。
Python3でのif文の記述方法(and・or・notによる複数条件指定、elif・elseの条件分岐など)
 
if文に含まれる処理は、インデント(字下げ)して記述します(通常、インデントには半角スペース4つが使われます。)。処理が複数行ある場合も、全てインデントします。
 
インデントが終わると、if文の一連の処理は終わります。また条件式の後には、必ず :(コロン)を付けてください。
 
 
if文の利用方法について、いくつか例を挙げていきます。
 
変数salesに代入された数値が、100以上の場合、「Salesは100以上です。」と表示します。またif文の処理の後に、「if文の処理ではありません。」と表示します。これはif文に関係なく、表示されます。
 
salesに120を代入し実行するとif文の処理が実行され「Salesは100以上です。」と表示されました。また「if文の処理ではありません。」も表示されます。

salesは100以上です。
if文の処理ではありません。

 
 
同じ処理に対して、今度はsalesに80を代入し実行してみましょう。すると、if文の処理は実行ず、if文の後の処理で「if文の処理ではありません。」とだけ表示されました。

if文の処理ではありません。

 
 

elif、elseを使った条件分岐

if文を記述する際に、条件がいくつかある場合、elifを使って条件を増やすことができます。また、全ての条件を満たさなかった場合の処理は、elseを使って書きます。
 
elif、elseを用いたif文の記述方法は以下になります。

if 条件式1:
       条件式1がTrueの時に実行する処理
elif 条件式2:
       条件式2がTrueの時に実行する処理
…         …        …
elif 条件式n:
       条件式nがTrueの時に実行する処理
else:
       条件式1~nが全てFalseの時に実行する処理

 
elif、elseに含まれる処理も、インデント(字下げ)して記述します。処理が複数行ある場合も、全てインデントします。また条件式の後には、必ず :(コロン)を付けてください。
 
条件式1~nについては、上から順にTrue/Falseの判定を行い、Trueになった最初の条件式に該当する処理だけが実行されます。
 
 
elif、elseの利用方法について、いくつか例を挙げていきます。
 
変数salesに代入された数値が、それぞれ、
       100以上の場合、「Salesは100以上です。」
       100未満で50以上の場合、「salesは100未満、50以上です。」
       50未満で20以上の場合、「salesは50未満、20以上です。」
       20未満の場合、「salesは20未満です。」
と表示します。
 
salesに80を代入し実行すると1つ目のelif文の処理が実行され「salesは100未満、50以上です。」と表示されました。2つ目のelif文の処理やelse文の処理は実行されません。

salesは100未満、50以上です。

 
同じ処理に対して、今度はsalesに10を代入し実行すると、全てのif、elif文の条件はFalseになりますので、else文の処理が実行され「salesは20未満です。」と表示されます。

salesは20未満です。

 
if文のelse、elifに関する詳しい説明は、「Pythonでif文でelse、elifを使った複数の条件分岐」を参照ください。

 
 
 

if文の比較演算子、論理演算子

これまで説明してきましたif文の条件式の中で使用されるのが比較演算子で、Pythonで利用されているものは以下になります。

比較演算子意味
>左辺の値が大きい
>=右辺の値より左辺の値が大きいか等しい
<右辺の値が大きい
<=右辺の値より左辺の値が小さいか等しい
==両辺の値が等しい
!=両辺の値が等しくない

 
また条件式の中では論理演算子も利用でき、Pythonで利用されているものは以下になります。

論理演算子意味
and両辺の値が共にTrueの場合にTrue
or両辺の内、少なくとも1つがTrueの場合にTrue
notnot以降の条件式がTrueの時にFalse、Falseの時にTrue

 
 
 

論理演算子and、orによる複数条件の指定方法

if文を記述する際に条件がいくつかある場合、論理演算子のandやorを利用して、複数の条件を記述することもできます。
 
論理演算子andを用いたif文の記述は以下になります。

if 条件式1 and 条件式2:
       条件式1、条件式2がともにTrueの時に実行する処理

 
また論理演算子orを用いたif文の記述は以下になります。

if 条件式1 or 条件式2:
       条件式1、条件式2のいずれかがTrueの時に実行する処理

 
 
論理演算子andを利用した例を見てみましょう。
 
変数salesに代入された数値が、100以上500未満の場合、「Salesは100以上、500未満です。」と表示します。そしてそれ以外の場合、「Salesは100未満、もしくは、500以上です。」と表示します。
 
salesに120を代入し実行すると「Salesは100以上、500未満です。」と表示されました。

salesは100以上、500未満です。

 
同じ処理に対して、今度はsalesに90を代入し実行すると、「salesは100未満、もしくは、500以上です。」と表示されました。

salesは100未満、もしくは、500以上です。

 
 
if文のand、orに関する詳しい説明は、「Pythonのif文でand、orによる複数条件の指定方法」を参照ください。

 
 
 

論理演算子notによる条件での否定の指定方法

if文を記述する際に論理演算子notを用いて、ある条件を満たさなかった場合に、特定の処理を実行するよう記述することもできます。
 
論理演算子notを用いたif文の記述は以下になります。

if not 条件式1:
       条件式1がFalseの時に実行する処理

 
 
また論理演算子notを利用した例も確認していきましょう。
 
if notは、条件が成立しなければif文内に記述した処理が実行されます。変数salesに代入された数値が、100では無い場合、「Salesは100ではありません。」と表示します。そしてそれ以外の場合、「Salesは100です。」と表示します。
 
salesに400を代入し実行すると「Salesは100ではありません。」と表示されました。

Salesは100ではありません。

 
一方でsalesに100を代入し実行すると「Salesは100です。」と表示されました。

Salesは100です。

 

 
 

if文の中にif文の記述(ifのネスト、入れ子)

if文の中にif文を記述することも可能です。ネスト、入れ子とも言います。
Python3のif文の中にif文の記述(ifのネスト、入れ子)

 
次の例では、2つの変数salesとprofitがあり、最初のif文でsalesの値に基づいて条件分岐します。そしてその中のif文で、さらにprofitの値に基づいて条件分岐をしています。

salesは100以上、500未満です。
そして、利益は10以上、30未満です。

salesに100を、profitに20を代入し実行すると「salesは100以上、500未満です。」「そして、利益は10以上、30未満です。」と表示されました。

 
このようにして、if文の中にさらにif文(ifのネスト、入れ子)を記述することができます。

 
 
 

if文の条件文を複数行で記述する方法

if文の条件文は、条件式が多くなると長くなり見づらくなることがあります。
Python3のif文の条件文を複数行で記述する方法

 
このような場合、条件文を( )括弧でくくると、複数行に分けて記述することができます。
Python3のif文の条件文を複数行で記述する方法

 
2つの変数salesとprofitがあり、1つのif文でsalesとprofitの値に基づいて条件分岐しようとしています。ただし、条件文が長くなるので、2行に分けて書いています。

salesは100以上、500未満です。そして、利益は10以上、30未満です。

 
このようにして、if文の条件文を複数行に分けて記述することができます。

 
 
 

if文での値が存在しないNone(Null)の判定方法(is None, is not None)

Pythonの定数の中には値が存在しない場合に利用されるNone(Null)というものがあります。関数の戻り値がなかった場合などにNoneが返ってくることがあります。

 
例えば、関数からの戻り値を設定したある変数がNoneか否かを判定する場合、

if 変数 is None:
       変数がNoneの時に実行する処理
else:
       変数がNoneでない時に実行する処理

と記述します。

 
またNoneではないことを判定する場合、is not Noneと書きます。

if 変数 is not None:
       変数がNoneでない時に実行する処理
else:
       変数がNoneの時に実行する処理

 
関数get_sales()から取得した戻り値を変数salesに格納し、その値がNoneか否かを判定しています。

salesはNoneです。

関数get_sales()の戻り値はなく、変数salesの値はNoneと判定されました。

 
このように、Noneか否かの判定は、is None、もしくは、is not Noneを使って行うことができます。

 
 
 

if文でbool型(True/False)の判定方法

Pythonのデータ型にはTrue/Falseで表されるbool型というものがあります。

 
if文でbool型の変数の値を判定する場合、次のように記述します。

if bool型の変数:
       変数の値がTrueの時に実行する処理
else:
       変数の値がFalseの時に実行する処理

最初のif文の条件文でbool型の変数がTrueか否かの判定をしています。

 
またnotを使って、次のようにも書くことができます。最初のif文の条件文でFalseか否かの判定をしています。

if not bool型の変数:
       変数の値がFalseの時に実行する処理
else:
       変数の値がTrueの時に実行する処理

Trueの時に実行する処理とFalse時に実行する処理が逆になっています。

 
変数check_flgにbool型でTrueを代入します。そしてif文でTrueか否かを判定しています。

check_flgはTrueです。

if文でTrueと判定され「check_flgはTrueです。」と表示されました。

 
今度はif not check_flg:で、Falseか否かを先に判定してみましょう。

check_flgはTrueではありません。

変数check_flgにFalseを代入して実行すると、if not check_flg:の条件が満たされ、「check_flgはTrueではありません。」と表示されました。

 
このように、bool型のTrueか否かの判定は、if bool型の変数:、もしくは、if not bool型の変数: で実施することができます。

 
 
 

if文 inによる特定の値が含まれるかの判定方法

if文を利用して、リストやタプルなどに特定の値が含まれているかを判定することもできます。

 
inを用いたif文の記述は以下になります。

if 特定の値 in リストなど:
      Trueの時(含まれている時)に実行する処理

 
また特定の値が含まれていないことを判定するにはnot inを利用します。

if 特定の値 not in リストなど:
      Trueの時(含まれていない時)に実行する処理

 
それではif文でinを利用した例を確認していきます。
 
変数xの値がリスト[1, 2, 3, 4]に含まれる場合、「Trueです。」と表示します。そして含まれない場合、「Falseです。」と表示します。xに3を代入し実行すると「Falseです。」と表示されました。

Falseです。

 

同様の処理で、今度はxに4を代入し実行すると「Trueです。」と表示されます。

Trueです。

 
 
inによる特定の値が含まれるかの判定方法の詳しい説明は、「Pythonのif文 inによる特定の値が含まれるかの判定方法」を参照ください。

 
 
 

if文を一行で記述する方法

if文は一行で記述することもできます。if文を一行で記述する方法は次のようになります。

条件式がTrueの時に実行する処理 if 条件式 else 条件式がFalseの時に実行する処理:

 
if文の中の条件式や処理の順番が変わり、わかりづらくなりましたので、通常のif文との違いを番号を付けて、確認しましょう。
 
通常のif文の構成要素に番号を振ると次のようになります。
 
Python3でif文を一行で記述する方法

 
これを一行で記述するには、次のように順番を変える必要があります。
Python3でif文を一行で記述する方法
1.と2.の箇所の順番が入れ替わっています。

 
 
それでは、以下のif文を使った記述を一行に書き直してみましょう。

Falseです。

 
 
上記のif文を一行に書き直すと、次のようになります。

Falseです。

 
 
今度は変数xに3を代入すると、「Trueです。」と表示されました。

Trueです。

 
このようにして、if文は一行でも記述することができます。
 
if文を一行で記述する方法の詳しい説明は、「Pythonでif文(else/elif)を一行で記述する方法」を参照ください。
 
 
 
 
関連記事です。
Pythonに関する重要なトピック全般について学んでいきたいと考えておられる方には、次のリンクをお勧めします。

 






まとめ記事

1

Python3におけるWEBスクレイピングのやり方について初心者向けに解説した記事です。   Requests、Beautiful Soup、Selenium、Pandas、newspape ...

2

Pythonの基本的なトピックについて、チュートリアル形式で初心者向けに解説した記事です。プログラミング未経験者や初心者でもわかりやすいよう、丁寧に解説しています。   Pythonでデータ ...

3

Pandas(パンダス)とは、データを効率的に扱うために開発されたPythonのライブラリの1つで、データの取り込みや加工・集計、分析処理に利用します。   Pandasには2つの主要なデー ...

4

データ分析、機械学習、ディープラーニングにはグラフの描画による可視化は不可欠です。データは、加工前の状態ではただの数字の羅列でしかなく、一目で必要な情報が伝わるものではありません。それを集計しグラフに ...

5

NumPy(ナンパイ)は、数値計算を効率的に行うための拡張ライブラリです。ベクトルや行列などを効率的に数値計算するための数学関数ライブラリを提供します。NumPyを使うことにより、数値計算をより早く、 ...

-10. 条件分岐(IF文)

Copyright© AI-interのPython3入門 , 2020 All Rights Reserved.