プログラミングの基本である、条件分岐のif文について紹介していきます。
本記事はこんな方におすすめです。
本記事の内容
- 真偽について
- 比較演算子
- 基本的書き方
- 比較演算子
- 条件を複数使う
- 比較演算子の省略
- 1行での記述
- passの使い方
- 文字列や配列(list, tuple)を使う場合
- 関数を使う場合
pythonのif文は色々な書き方があるので、本記事の内容を知っておくと他の人のコードを見て、なんだこれ?とはならないレベルにまで習得できます。
python入門 基礎まとめも参考にしてください。
目次
真偽
if文では、条件が真(正しい)か偽(正しくない)によって、処理が実行されます。
真偽はTrue/Falseで表されます。
if文の一番シンプル書き方は次のようになります。
インデント(字下げ)は「タブ」若しくは「半角スペース4つ」を使います。
*他の書き方はあとでしっかり説明していきます。
条件に、True/Falseを入れて動かしてみます。
# 処理される if True: print('Trueの時') # 処理されない if False: print('Flaseの時')
Trueの時
表示されたのは、Trueの時だけですね。
これが条件分岐の特徴で、条件がTrueの時のみ実行します。
メモ
print('文字')で、文字を出力することができます。
文字はコーテーション(')か、ダブルコーテーション(")で囲いましょう。
print(変数名)で、変数の値の表示もできます。
比較演算子
次に、True/Flaseと判定する条件で使う比較演算子についてです。
例えば、「10以上」「10未満」「10と等しい」などです。
これらは、下記の比較演算子で表すことができます。
演算子 | Trueの時 | Falseの時 |
---|---|---|
x == y | xとyが等しい | xとyが等しくない |
x > y | xがyより大きい | xがy以下 |
x >= y | xがy以上 | xがy未満 |
x < y | xがy未満 | xがy以上 |
x <= y | xがy以下 | xがyより大きい |
x != y not x == y |
xとyが等しくない | xとyが等しい |
x is y | xとyのオブジェクトが同じもの | xとyのオブジェクトが違うもの |
x is not y not x is y |
xとyのオブジェクトが違うもの | xとyのオブジェクトが同じもの |
x in y | xがyに含まれている | xがyに含まれていない |
x not in y not x in y |
xがyに含まれていない | xがyに含まれている |
*オブジェクト:クラス、関数など取り扱っているもの
使ってみる
例えば、aという変数を1つ目と5つ目の比較演算子を試してみます。
a = 10 if a==10: print('aは10です。') if a!=1: print('aは以外です。')
aは10です。 aは以外です。
2つとも条件がTrueになるので、文字が出力されています。
条件をprint文で確認することができます。
print(a==10)
Trueと表示されます。
1-6の他の演算子も試してみてください。
オブジェクトの条件判定
これは、今わからない場合は、頭の隅にでも置いておいてください。
変数以外にもオブジェクトの一致を見る時があります。
例えば、次の2つのコードを比べてみましょう。[10]というlist型を判定しています。
a = [10] b = [10] if a is b: print('aとbは一緒です。')
a = [10] b = a if a is b: print('aとbは一緒です。')
どちらが、「aとbは一緒です。」と出力されるでしょうか?
実際に動かしてみてください。
答えは、2つ目の方です。
2つ目の方は、b=a(bにaが入っている)で、オブジェクトが同じだということになります。
値が同じというのとは別の意味になります。
9,10つ目のinの使い方は、あとで「文字列や配列」のところで紹介します。
基本的使い方
さて、やっとここでif文の基本的な使い方を紹介していきます。
3つと1つおまけがあります。
if 条件
先ほども出てきましたが、1つ目
条件がTrueの時に実行されます。
a = 5 if a<10: print('aは10未満')
aは10未満
if 条件 else
2つ目。条件がTrueの時とFalseの時の処理を分けて実行。
# if else a = 11 if a<10: print('aは10未満') else: print('aは10以上')
aは10以上
if 条件 elif 条件 ... else
3つ目。条件を複数入れる場合。
a = 5 if a<10: print('aは10未満') elif a>=10: print('aは10以上')
aは10未満
elif 条件はいくつ足してもOKです。
elseは不要であれば省略ができます。
ここに注意
条件は上から優先されます。
下記例を見てみましょう。
a = 5 b = 5 if a<10: print('aは10未満') elif b<10: print('bは10未満') else: print('a,bは10以上')
aは10未満
b<10の条件にも一致しますが、a<10の条件が優先されて実行されます。
複数の条件をそれぞれ、判断したい場合は、if文を次のように分けましょう
a = 5 b = 5 if a<10: print('aは10未満') if b<10: print('bは10未満')
aは10未満 bは10未満
それぞれの条件でしっかり処理がされています。
ifの入れ子
ifは入れ子にすることができます。
a = 5 b = 5 if a<10: if b<10: print('aは10未満で、bも10未満')
aは10未満で、bも10未満
メモ
他の言語をされたことがある方は、VBのselect case、Cのswitch caseはないの?
と思ったかもしれませんが、結論、ないです。
条件を複数使う
条件は複数同時に設定することができます。
例えば、条件が「20以上かつ30未満」というような場合です。
and orについて
条件を複数使う場合は、andとorを使います。
if (条件1) and (条件2):
といった使い方です。
この時、条件はかっこ()で囲ってあげる必要があります。
条件1 and 条件2の場合。両方がTrueの時のみTrueになります。
条件1 | 条件2 | 結果 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
条件1 or 条件2の場合。どちらかがTrueであればTrueになります。
条件1 | 条件2 | 結果 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
使ってみる
入れ子の時に使ったコードを変更します。
Before
a = 5 b = 5 if a<10: if b<10: print('aは10未満で、bも10未満')
After
a = 5 b = 5 if (a<10) and (b<10): print('aは10未満で、bも10未満')
条件2つを満たすときに、処理がされるので、同じ処理になりました。
他にも、一つの値を複数の条件で分ける時に使います。
a = 11 if a<10: print('aは10未満') elif (a>=10) and (a<20): print('aは11以上、20未満') elif (a>=20) and (a<30): print('aは20以上、30未満') else: print('aは30以上')
aは11以上、20未満
比較演算子の省略
ここからが、少し特徴的な使い方になります。
比較演算子を使わなくても、TrueやFalseとなる場合があります。
対象 | Trueになる | Falseになる |
---|---|---|
数値 | 0以外 | 0 |
文字列 | 1文字以上ある | 1文字もない |
list、dict | データが入っている | データが空 |
オブジェクト | Noneじゃない | None |
数値を例に見てみましょう。
a = 0 if a: print('aは0ではありません。') else: print('aは0です。')
aは0です。
if a:としただけで、条件分岐で処理ができています。
list(配列データ)も見てみます。
list_data = [1,2,3] if list_data: print(sum(list_data)) else: print('データ読み込まれていません。')
6
データが読み込まれてたら、処理するという場合などで使えます。
1行での記述
次のように、if else文は1行で表すことができます。
普通に書いた場合と比べてみましょう。
普通にif文を使った場合
a = 0.7 result = '' if a > 0.5: result = '陽性' else: result = '陰性' print(result)
陽性
1行にした場合
a = 0.7 result = '陽性' if a > 0.5 else '陰性' print(result)
陽性
passの使い方
if文では処理の記述を省略するにはpassを使う必要があります。
というのも他の言語では、処理は書かず省略できますが、pythonではできません。
例えば、下記コードを実行します。
a = 0.7 result = '' if a > 0.5: result = '陽性' else: # 処理検討中 print(result)
IndentationError: expected an indented block
というふうにエラーが出ます。
インデントエラーですが、elseの後に処理がないので怒られます。
こういう時は、passと入れると解決します。
a = 0.7 result = '' if a > 0.5: result = '陽性' else: # 処理検討中 pass print(result)
文字列や配列(list, tuple)
文字列や配列では比較演算子の「in」を使うことが多いです。
x in y で xがyの中に含むかどうかを判断することができます。
文字列の場合
a = 'りんごが食べたい' if 'りんご' in a: print('りんごを含む') if 'みかん' in a: print('みかんを含む')
りんごを含む
listの場合
a = ['りんご', 'みかん', 'ぶどう'] if 'りんご' in a: print('りんごを含む') if 'スイカ' in a: print('スイカを含む')
りんごを含む
関数を使う場合
長くなりましたが、これで最後になります。
条件のところは、比較演算だけでなく、関数とかでも利用できます。
先ほど使った下記のコードを変更していきます。
Before
a = 0.7 result = '' if a > 0.5: result = '陽性' else: result = '陰性' print(result)
After
def judge(value): if a > 0.5: return True else: return False a = 0.7 result = '' if judge(a): result = '陽性' else: result = '陰性' print(result)
判定するjudgeという関数を用意して、if文の条件の箇所に使っています。
コード量は多くなりますが、judgeの処理が複雑になるときは、比較演算子では対応できないので、関数化することで条件に使いましょう。
以上が、if文の使い方です。
これで、他の人のコードに右往左往されることはありません。