Python

【Python 6】条件分岐

環境

macOS Big Sur
Python3.8

文(単純文と複合文)

1行で表現される命令を「単純文」といい、複数行で表現される命令を「複合文」といいます。

Pythonにおける複合文は、キーワードを含みコロン(:)で終わる行(「ヘッダー」といいます。)と、その下のインデントされた部分(「スイート」といいます。)で構成されています。

ヘッダーとスイートを合わせて「節」と呼び、複合文は1つ以上の節を含みます。

ヘッダーがスイートを制御しており、ヘッダーに対するスイートのブロックはインデントによって指定されます。インデントは半角スペース4文字です。

# 単純文の例。
>> print('Hello world!')

# 複合文の例。
>>> for i in range(5):  # ヘッダー
...     print(i)  # スイート

# 「>>>」を「プライマリプロンプト」、「...」を「セカンダリプロンプト」といいます。

 

条件分岐

if文

「if文」を使用することで条件分岐(特定の条件に従って処理を行うこと。)を実行できます。if文は次のように定義します。

if文

if 条件式:
    処理ブロック

Pythonで処理ブロック(スイート)を要求する場合は、一行目の最後にコロン(:)を付け、インデント(半角スペース4文字)で処理ブロックの範囲を明示します。

条件式には「ブール型(TrueかFalse)」、「比較演算子」、「論理演算子」を使います。条件式が「True」を返した時に処理ブロックが実行されます。

else文

If文の条件式が正しくない(False)時に実行する処理を「else文」で指定することができます。

if文

if 条件式:
    処理ブロック①
else:
    処理ブロック②

条件式が成り立たなかった時に処理ブロック②が実行されます。

elif文

「elif文」(elifはelse ifの略)を使用することで、複数の条件を設定できます。

if文

if 条件式①:
    処理ブロック①
elif 条件式②:
    処理ブロック②

条件式①が成り立つ時は処理ブロック①が、条件式②が成り立つ時は処理ブロック②が実行されます。

elif文が複数ある場合、上から順番に評価され、条件式が成り立った処理ブロックが実行されます。それ以降のelif文は評価もされません。

比較演算子

比較演算子(Relational Operator)による比較では、結果は「True(正しい)」または「False(正しくない)」が返されます。

比較演算子 表記例 Trueを返す条件
== x == y xはyと等しい
!= x != y xはyと異なる
> x > y xはyより大きい
< x < y xはyより小さい
>= x >= y xはy以上
<= x <= y xはy以下
in x in y xはyに属する
not in x not in y xはyに属さない
is x is y xはyと参照先が等しい
is not x is not y xはyと参照先が異なる

比較演算子は数値の比較で多く用いられますが、文字列やコンテナを比較する場合にも使用できます。

比較演算子 取り扱い
文字列 ==, != 文字列が完全に一致するか比較。
>, <, >=, <= 文字列の文字コードの順番を1文字目から比較。
in 文字列の中に含まれているか検索。
リスト、タプル(リストとタプルを比較することはできません。) ==, != 要素が順番を含め全て一致するか比較。
>, <, >=, <= インデックス毎に対応した要素を比較し、全てが条件を満たすか比較。
in 要素に含まれているか検索。
ただし、複数の要素が含まれているかを調べることはできない。
[1,2] in [1, 2, 3, 4]はFalseになる。(リストの中のリストを検索できるようにするため。)
辞書 ==, != 要素(キーと値のペア)が全て一致(順番は関係無し)するか比較。
>, <, >=, <= 使用不可。
in キーに含まれているか検索。
ただし、複数のキーが含まれているかを調べることはできない。
集合 ==, != 順序は関係なく、要素が全て一致するか比較。
<, <= 部分集合(集合A<集合Bの場合、集合Aの要素が全て集合Bに含まれている状態)か比較。
=があれば等しい場合もTrue。
>, >= 上位集合(集合A>集合Bの場合、集合Aが集合Bの要素を全て含んでいる状態)か比較。
=があれば等しい場合もTrue。
in 要素に含まれているか検索。
ただし、複数の要素が含まれているかを調べることはできない。

論理演算子

論理演算子(Logical Operator)を使用することで、より複雑な条件式を指定できます。

論理演算子 意味 表記例 表記例の意味
and かつ A == B and C == D A=BかつC=Dのとき「True」
or または A == B or C == D A=BまたはC=Dのとき「True」
not 否定 not A == B A=Bのとき「False」
なお、複数の論理演算子を使用した場合、評価は左から順に行われ、結論が出た段階でストップされます。
>>> a = True
>>> b = False
>>> c = True
>>> a and b and c
False
# 「a and b」の段階で結論はFalseとなるため、cは評価されません。

 

数値や文字列、コンテナ等にも論理演算子が使用できます。

数値では0がFalse、0以外がTrue。文字列では空文字がFalse、空文字以外がTrue。コンテナでは要素が空(長さが0)の場合にFalse、空以外がTrue。None(何もデータがない状態)はFalseとなります。なお、最後に評価された値が返されます。

>>> a = 0
>>> b = 1
>>> c = 2
>>> a and b and c  # 論理演算子がandのみであり、aがFalseのため、結論はFalseとなり、評価終了。
0
>>> a or b or c  # 論理演算子がorのみであり、「a or b」の段階で結論はTrueとなるため、評価終了。
1
>>> a and b or c  # 「a and b」はFalseだが、「or c」によって結論はTrueとなる。
2

 

演算子の優先順位:

  1. 算術演算子
  2. 比較演算子
  3. 論理演算子(not、and、orの順で評価されます)

数値計算のように()で優先順位を変更することができます。

# if文のプログラム例
>>> a = 12
>>> if a > 15:
...     print('aは15より大きい。')
... elif a > 10:
...     print('aは15以下で10より大きい。')
... elif a == 10:
...     print('aは10。')
... else:
...     print('aは10より小さい。')
... 
aは15以下で10より大きい。