こんにちは(@t_kun_kamakiri)(‘◇’)ゞ
この記事ではPythonの条件分岐である「if文」の構文について解説します。
- if文の書き方
- 比較演算子の理解
- 複数パターンの条件分岐:if~else
- 「and条件」と「or条件」
こちらの本がPython初心者が挫折することなく勉強できる本です。
(本記事のようのPython使用環境と異なりますが、とてもわかりやすいので全く問題ありません)
Pythonでのif文の書き方
まずは、Pythonのif文の書き方を解説します。
- if文の最後に「コロン」をつける。
- コードブロックの区間を「インデント(字下げ)」をする。
条件式の部分に何を書くかというと「比較演算子」を書きます。
比較演算子を完全にマスターしよう
Pythonの比較演算子には以下の記述方法があります。
比較演算子 | 例 | 内容 |
== | a == b | aとbが等しければTrue。 そうでなければFalse。 |
!= | a != b | aとbが等しくなければTrue。 そうでなければFalse。 |
> | a > b | aがbより大きければTrue。 そうでなければFalse。 |
< | a < b | aがbより小さければTrue。 そうでなければFalse。 |
>= | a >= b | aがb以上(bの値を含む)であればTrue。 そうでなければFalse。 |
<= | a <=b | aがb以下(bの値を含む)であればTrue。 そうでなければFalse。 |
is | a is b | aとbが同じオブジェクトであればTrue。 そうでなければFalse。 |
is not | a is not b | aとbが同じオブジェクトでなければTrue。 そうでなければFalse。 |
in | a in b | aがbの要素であればTrue。 そうでなければFalse。 |
not in | a not in b | aがbの要素でなければTrue。 そうでなければFalse。 |
比較演算子はたくさんありますが、ひとつひとつコードを書いていけば理解ができるとおもいます。
「a == b」:aとbが等しければTrue。そうでなければFalse。
実際にコードを書いてみましょう。
1 2 3 4 5 |
a = 10 b = 10 if a == b: print('aとbは10です。') |
「x = 10」と指定し、if文で比較演算子によって真偽を確かめています。
- 条件式が成立するなら➡真(True)
- 条件式が成立しないなら➡偽(False)
【結果】
1 |
aとbは10です。 |
aとbは両方とも値が10なので、if文の中のprint文による出力で「aとbは10です。」と返ってきています。
このように、if文の後に比較演算子を書くことでif文の中の処理を行うかどうかを判断する処理を行っています。
「a != b」:aとbが等しくなければTrue。そうでなければFalse。
実際にコードを書いてみましょう。
1 2 3 4 5 |
a = 10 b = 10 if a != 10: print('aとbは等しくありません。') |
【結果】
1 |
なにも出力されません。 |
実際にコードを実行してみると、条件式を満たさないためprint文は読み込まれず、何も出力がされません。
これは、aとbは両方とも値が10なので、等しくない場合の条件であるif文の中の処理が行われないためです。
逆に以下のコードだとprint文の処理が行われます。
1 2 3 4 5 |
a = 10 b = 5 if a != b: print('aとbは等しくありません。') |
【結果】
1 |
aとbは等しくありません。 |
「a=10」と「b=5」なので値は等しくありません。等しくない場合の条件であるif文の中の処理が行われて「aとbは等しくありません。」と返ってきています。
「a > b」aがbより大きければTrue。そうでなければFalse。
実際にコードを書いてみましょう。
1 2 3 4 5 |
a = 50 b = 10 if a > b: print('aはbより大きいです。') |
【結果】
1 |
aはbより大きいです。 |
aはbよりも値が大きいため、if文の条件式を満たし、print文の「aはbより大きいです。」が出力されています。
「~より大きい」というのは、その値を含まないため、例えばaとbが同じ値である場合は条件式を満たさないことに注意してください。
1 2 3 4 5 |
a = 10 b = 10 if a > b: #条件式を満たさないため何も出力されません。 print('aはbより大きいです。') |
↑このようなコードはif文の条件式を満たさないため、printb文は実行されません。
※「a < b」の場合も処理も試してみてください<(_ _)>
「a >= b」:aがb以上(bの値を含む)であればTrue。そうでなければFalse。
先ほどの「>」「<」とは違って、「>=」や「<=」はその値を含む場合も条件を満たすことになります。
実際にコードを書いてみましょう。
1 2 3 4 5 |
a = 50 b = 10 if a >= b: print('aはb以上です。') |
【結果】
1 |
aはb以上です。 |
「a = 50」は「b = 10」以上であるため、if文の条件式を満たしてprint文の「aはb以上です。」が出力されています。
※「>」や「<」と違うところは、「aとbが等しい場合」もif文の条件を満たします。
1 2 3 4 5 |
a = 10 b = 10 if a >= b: print('aはb以上です。') |
【結果】
1 |
aはb以上です。 |
「>」や「<」では、if文の条件が満たされなかったのですが、今回は「a = b」の場合も条件式を満たしているためprint文の「aはb以上です。」が出力されています。
※「a <= b」の場合も処理も試してみてください<(_ _)>
「a is b」:aとbが同じオブジェクトであればTrue。そうでなければFalse。
このオブジェクトが同じであるかどうかというのは少し難しい話ですが、実際にコードを書いてみれば理解が深まります。
同じオブジェクトかどうかは、アドレスを一緒に出力してみることで確認することができます。
1 2 3 4 5 6 7 8 9 |
a = 10 b = 10 print('a=',a, ':id=', id(a)) print('b=',b, ':id=', id(b)) if a is b: print('aとbは同じオブジェクトです。') |
【結果】
1 2 3 |
a= 10 :id= 10914784 b= 10 :id= 10914784 aとbは同じオブジェクトです。 |
変数に同じ値を入れると同じアドレスにデータが格納されているということになるようです。
なので、同じオブジェクトと認識されて、if文の条件式が満たされて「aとbは同じオブジェクトです。」が出力されています。
では、違う値を変数に設定するとどうなるのか見てみます。
1 2 3 4 5 6 7 8 |
a = 20 b = 10 print('a=',a, ':id=', id(a)) print('b=',b, ':id=', id(b)) if a is b: print('aとbは同じオブジェクトです。') |
【結果】
1 2 |
a= 20 :id= 140705414846720 b= 10 :id= 140705414846400 |
aとbに違う値を代入すると、違うアドレスになっているのがわかります。
なんで、if文の条件を満たさないのでprint文が実行されていないという結果になりました。
これは、どういうことなのか絵で表現してみました。
同じ値を変数に代入すると同じアドレスを参照し、違う値を変数に代入すると違うアドレスを参照しているということですね。
では、リストの場合はどうなのか見てみます。
aとbで同じリストを別々で定義する。
1 2 3 4 5 6 7 8 |
a = ['kamakiri', 32] b = ['kamakiri', 32] print(a, id(a)) print(b, id(b)) if a is b: print('aとbは同じオブジェクトです。') |
↑こちらはどうなるでしょう?
明らかに違うデータを作成しているので、aとbのオブジェクトは異なりますよね。
【結果】
1 2 |
['kamakiri', 32] 140282685742280 ['kamakiri', 32] 140282685806664 |
結果は、やはり別々にオブジェクトを作成しているので、アドレスが異なるためif文の条件式を満たしませんでしたね。
a=bとする。
リストの代入は基本が「参照渡し(同じアドレスのデータを参照する)」のでした。
1 2 3 4 5 6 7 8 |
a = ['kamakiri', 32] b = a print(a, id(a)) print(b, id(b)) if a is b: print('aとbは同じオブジェクトです。') |
【結果】
1 2 3 |
['kamakiri', 32] 140282686032328 ['kamakiri', 32] 140282686032328 aとbは同じオブジェクトです。 |
結果は、当然aとbは同じオブジェクトなのでアドレスも同じです。
なので、if文の条件を満たして、print文の「aとbは同じオブジェクトです。」が出力されています。
copy()メソッドを使う
copy()メソッドを使うと、異なるオブジェクトを作成して値を同じにするというものでした。
1 2 3 4 5 6 7 8 |
a = ['kamakiri', 32] b = a.copy() print(a, id(a)) print(b, id(b)) if a is b: print('aとbは同じオブジェクトです。') |
【結果】
1 2 |
['kamakiri', 32] 140282685617096 ['kamakiri', 32] 140282685742280 |
結果は、別々にオブジェクトを作成しているので、アドレスが異なるためif文の条件式を満たしませんでした。
以上のように、違いを認識しておかないと思いもよらないところで参照先(アドレス内)の値が変わってしまい、変数の値を変えた覚えがないのに値が変わってしまっているということがあり、長いコードを書いたときに気づきにくいです(知らないと気づけない・・・)。
※「is not」も各自コードを書いて実行し、結果を確認してみてください。
a in b:aがbの要素であればTrue。そうでなければFalse。
「aがbの要素であれば」とは少々わかりにくいですが、以下のようなコード書いて実行してみます。
1 2 3 4 5 6 |
b = ['kamakiri', 32] print(b) if 'kamakiri' in b: print('bに"kamakiri"という要素があります。') |
【結果】
1 2 |
['kamakiri', 32] bに"kamakiri"という要素があります。 |
「b = [‘kamakiri’, 32]」というリストを作り、bの中に’kamakiri’という要素があれば、if文のなかのpritnt文「’bに”kamakiri”という要素があります。’」が出力されているということです。
同様に以下のコードも実行してみましょう。
1 2 3 4 5 6 |
b = ['kamakiri', 32] print(b) if 32 in b: print('bに32という要素があります。') |
【結果】
1 2 |
['kamakiri', 32] bに32という要素があります。 |
bに「32」という要素が存在するのでif文の条件式の中の処理が行われているのがわかります。
先ほどの「if a is b:」の条件とは違うことを理解しておかないといけないですね。
aとbのオブジェクトを同じにしても、「for ~ in ~:」の条件式を満たすわけではないです。
1 2 3 4 5 6 7 8 |
a = ['kamakiri', 32] b = a print(a, id(a)) print(b, id(b)) if a in b: print('aがbの要素です。') |
このようにaとbのオブジェクトを同じにしても、以下の結果となります。
【結果】
1 2 |
['kamakiri', 32] 140646578113224 ['kamakiri', 32] 140646578113224 |
aとbのアドレスは同じでも、if文の中の処理が行われていないですよね。
※「not in」も各自コードを書いて実行し、結果を確認してみてください。
比較演算子の種類は多いですが、わからなくなったらその都度正確な書き方を調べれば良いので、ここでは「こんなのがあるのか~」ってことを感じておけばよいですね。
if~elseの書き方
Pythonでのif文の条件分岐についてもう少しやっていきます。
if文の例1
以下のような条件分岐を考えます。
Pythonでの条件分岐の基本的な書き方は以下です。
1 2 3 4 |
if 条件: 条件に合致した場合(True)に実行される else: 条件に合致しない場合(False)に実行される |
再度復習になりますが、ここで注意する点は、
- if 条件の後に「:」を忘れないこと
- if文の中は「(Tab)スペース」がいること
※これはPythonでのif文の中であることを明確にするためのPythonでの記述の決まりです(これをインデントと言います)
実際にコードを書いてみましょう。
1 2 3 4 5 6 |
name="カマキリ" if (name=="カマキリ"): print("カマキリです") else: print("カマキリではありません") |
【結果】
1 |
カマキリです |
「name=”カマキリ”」と変数を定義しているので、ひとつめのif文の中のprint文の「カマキリです」という出力がされています。
if文の例2
もっと分岐を増やすことも可能です。
1 2 3 4 5 6 7 8 9 10 |
if 条件A: (処理) elif 条件B: (処理) elif 条件C: (処理) elif 条件D: (処理) else: (処理) |
実際にコードを書いてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
x=100 if (x<=10): print("xは10以下です") elif (x<=20): print("xは20以下です") elif (x<=30): print("xは30以下です") elif (x<=40): print("xは40以下です") elif (x<=50): print("xは50以下です") else: print("xは50より大きいです") |
【結果】
1 |
xは50より大きいです |
「x = 100」と定義しているので、if文のどの条件式にも満たさないので、最後に記述したelseの中の処理が行われています。
if文の例3
以下のように「if文の中にif文」を書くこともできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
x = 10 y = 20 if x == 10: print('x=10です') if y==20: print('y=20です') elif x==20: print('x=20です') elif x==30: print('x=30です') else: print('xは10,20,30ではありません') |
【結果】
1 2 |
x=10です y=20です |
どの条件式を満たしたからを絵で描くと以下のようになります。
「a and b (aかつb)」と「a or b (aまたはb)」の書き方
条件をひとつではなく、以下のように2つ以上にすることも可能です。
書き方の例 | 内容 |
a == 10 and b == 10 | aとbがともに10(a=10かつb=10)であればTrue。 そうでなければFalse |
a ==10 or b ==10 | aとbのどちらかが10(a=10またはb=10)であればTrue。 そうでなければFalse |
a == 10 and b == 10:aとbがともに10(a=10かつb=10)であればTrue。そうでなければFalse
実際にコードを書いてみましょう。
1 2 3 4 5 6 7 8 |
a = 1 b = 20 if a==10 and b==20: print('aは10です') print('bは20です') else: print('aが10でないか、bが20でないか') |
【結果】
1 2 |
a=10です b=20です |
「a = 10 かつ b = 20 」の条件式が満たされたので、ひとつ目のif文の中の処理が行われています。
ちなみに3つ以上で条件式を作ることもできます。
1 2 3 4 5 6 7 8 9 10 11 12 |
a = 10 b = 20 c = 30 if a == 10 and b == 20 and c == 30: print('a=10です') print('b=20です') print('c=30です') else: print('a=10ではありません') print('b=20ではありません') print('c=30ではありません') |
【結果】
1 2 3 |
a=10です b=20です c=30です |
このように、「and」はすべての条件が満たされたときに、ifの中の処理が行われるというものです。
a == 10 or b == 10:aとbがともに10(a=10またはb=10)であればTrue。そうでなければFalse
次に、「or(または)」についてです。
1 2 3 4 5 6 7 8 |
a = 10 b = 20 if a == 10 or b == 10: print('aとbのどちらかが10です。') else: print('aとbのどちらも10ではありません。') |
【結果】
1 |
aとbのどちらかが10です。 |
「a=10」なので(b=10ではいが)、2つの条件のうちのひとつがひとつ目のif文の条件を満たしたので、print文の「aとbのどちらかが10です。」という出力がされています。
このように、「or」はどちらか片方の条件が満たされたときに、ifの中の処理が行われるというものです。
まとめ
この記事では以下のの内容を学びました。
- if文の書き方
- 比較演算子の理解
- 複数パターンの条件分岐:if~else
- 「and条件」と「or条件」
if文の基本的な使い方で、どれもよく使う記述方法なので絶対に覚えておきましょう(^^)/
Pythonの記述についてもっと学びたいという方には以下の参考書をお勧めします。
初心者でも挫折することなく学ぶことができます。
Pythonの辞書的な参考書としては以下の参考書をお勧めします。
[…] 【Python初心者】if文を使って条件分岐をしてみよう! […]