はじめに
本記事ではPythonの入門者向けに、if文の基礎からPython特有の判定について基礎を解説します。本記事を読むことで、Pythonのifと条件式に関する実践的な知識を見つけることができます。
もし、複雑なif文をきれいにリファクタリングしたいなど中級者向け以上の知識について興味がある場合は以下の記事で解説しているので、こちらを参考にしてみてください。また、入門者の方も本記事を読んだあとに読むことでさらにスキルを磨くことができます。
if文とは
Pythonにおける条件分岐には、if
文が使われます。if
文は、ある条件によって、プログラムの流れを制御するために使用されます。
if
文は以下のように記述されます。
if 条件式:
条件式がTrueのときに実行される文
このように、if
キーワードの後に条件式を記述し、その後ろにコロン(:)を置きます。条件式がTrueのときに実行されるブロックは、インデントを使って指定します。インデントは、Pythonにおいてブロックを表すための重要な構文であるため、正しく指定する必要があります。
たとえば、次のコードは、x
が正の数の場合に、"x is positive"
というメッセージを表示します。
x = 10
if x > 0:
print("x is positive")
条件式がFalseの場合には、インデントされたブロックが実行されずに、if
文を抜けます。
条件式には、比較演算子や論理演算子を使用して、複雑な条件式を記述することができます。また、if
文を組み合わせることで、より複雑な条件分岐を実現することができます。
if文の注意点
Pythonのif文を書く際には、インデント(字下げ)に注意する必要があります。Pythonでは、ブロックを示すためにインデントが用いられます。if文の場合、条件が真である場合に実行する処理をインデントして書きます。インデントが誤っていると、構文エラーが発生するため、注意が必要です。
以下に、インデントが正しくないif文の例を示します。
x = 5
if x > 3:
print("x is greater than 3") # インデントが誤っているため、構文エラーが発生する
実行結果は次のとおりです。
IndentationError: expected an indented block after 'if' statement on line 2
Pythonにおいて、条件式は真(True)または偽(False)を返す式です。条件式は、if文やwhile文などの制御構造や、ブール演算子を使った論理式などで使用されます。
Pythonの3項演算子
Pythonにおいて、3項演算子はif文を簡潔に書くための演算子です。3項演算子は、if文と同じように条件式を評価し、条件が真の場合と偽の場合にそれぞれ異なる値を返します。
3項演算子の基本的な構文は以下の通りです。
真の場合に返す値 if 条件式 else 偽の場合に返す値
3項演算子を使うと条件式の判定と代入を1行で行うことができるのでコードが簡潔になるというメリットがあります。
以下の例では、if文で代入を行う場合と3項演算子を使った場合の比較を行います。
# if文で代入を行う場合
x = 5
if x > 0:
y = "Positive"
else:
y = "Non-positive"
print(y)# Positive
# 3項演算子を使った場合
x = 5
y = "Positive" if x > 0 else "Non-positive"
print(y)# Positive
この例では、変数xに5を代入し、その値が0より大きい場合には”Positive”という文字列を、そうでない場合には”Non-positive”という文字列を返します。この処理をif文で記述する場合は、if文で代入を行うことができます。一方、3項演算子を使った場合には、変数yに代入する式が短くなります。
3項演算子は、短い条件式を扱う場合にはコードが簡潔になり、可読性が向上するため、Pythonのコーディングではよく使われます。ただし、複雑な条件式を扱う場合には、if文を使った方が可読性が高くなることがあるため、適宜使い分けるようにしましょう。
Pythonの比較演算子
Pythonで使用可能な比較演算子には以下のものがあります。
==
:左辺と右辺が等しいときに真を返す!=
:左辺と右辺が等しくないときに真を返す<
:左辺が右辺より小さいときに真を返す>
:左辺が右辺より大きいときに真を返す<=
:左辺が右辺以下のときに真を返す>=
:左辺が右辺以上のときに真を返す
以下に比較演算子の使用例を示します。
x = 5
y = 3
if x == y:
print("x is equal to y")
if x != y:
print("x is not equal to y")
if x > y:
print("x is greater than y")
if x < y:
print("x is less than y")
if x >= y:
print("x is greater than or equal to y")
if x <= y:
print("x is less than or equal to y")
また、論理演算子を使うことで、複数の条件式を組み合わせることができます。Pythonにおいて、次の3つの論理演算子が使用可能です。
and
:左右の式が両方とも真であるときに真を返すor
:左右の式の少なくとも1つが真であるときに真を返すnot
:式が偽であるときに真を返す
以下に論理演算子の使用例を示します。
x = 5
y = 3
if x > 3 and y > 2:
print("x is greater than 3 and y is greater than 2")
if x > 3 or y > 5:
print("x is greater than 3 or y is greater than 5")
if not x == y:
print("x is not equal to y")
a < x < bとa <= x <= bはそのままかける
比較演算子を使用して、ある変数xが下限値aより大きく、かつ上限値bより小さいという条件式を表現する場合、以下のように書くことができます。
a < x < b
この式は、aよりxが大きく、かつbよりxが小さい場合に真を返します。また、aやbがxと等しい場合は偽を返します。
同様に、変数xが下限値a以上、かつ上限値b以下であるという条件式を表現する場合は、以下のように書くことができます。
a <= x <= b
この式は、a以上x以下であり、かつb以下x以上である場合に真を返します。また、aやbがxと等しい場合にも真を返します。
以上のように、Pythonではandで比較演算子をつなげる必要なく条件式を簡潔に表現することができます。
isやinを使った条件式の書き方
Pythonでは、条件式に加えて、in
演算子やis
演算子を使用することができます。
in演算子
in
演算子は、リストや文字列などのシーケンス型に対して使用することができます。左辺に要素、右辺にシーケンスを指定し、左辺の要素が右辺のシーケンスに含まれているかどうかを判定します。以下にin
演算子の使用例を示します。
my_list = [1, 2, 3]
if 2 in my_list:
print("2 is in my_list")
my_string = "hello, world"
if "hello" in my_string:
print("hello is in my_string")
is演算子
is
演算子は、左辺と右辺が同じオブジェクトであるかどうかを判定するために使用します。is
演算子は、左辺と右辺のオブジェクトが同じメモリアドレスを共有している場合に真を返します。以下にis
演算子の使用例を示します。
x = [1, 2, 3]
y = [1, 2, 3]
if x is y:
print("x and y are the same object")
else:
print("x and y are not the same object")
以上が、Pythonの条件式の基本的な使い方や演算子についての解説です。条件式をうまく活用して、プログラムの制御構造を構築しましょう。
変数それ自体が条件式として扱われる値について
Pythonでは、Noneや空配列など、変数それ自体が条件式として扱われる値が存在します。これらの値について、以下に網羅的に説明していきます。
None
None
は、Pythonにおいて「何もない」ということを表す特別な値です。変数がNone
である場合には、その変数がFalseとして扱われます。つまり、if文やwhile文で変数がNone
であるかどうかを判定することができます。
x = None
if x:
print("x is not None")
else:
print("x is None")
上記の例では、変数x
がNone
であるため、if文の条件式がFalseと評価され、”x is None”という文字列が出力されます。
空のリスト、辞書、setなどのコンテナデータ型
Pythonには、リストや辞書などのコンテナデータ型があります。これらのコンテナデータ型が空である場合には、その変数がFalseとして扱われます。つまり、if文やwhile文で変数が空かどうかを判定することができます。
空のリスト
my_list = []
if my_list:
print("my_list is not empty")
else:
print("my_list is empty")
上記の例では、my_list
が空のリストであるため、if文の条件式がFalseと評価され、”my_list is empty”という文字列が出力されます。
空の辞書
Pythonの辞書は、キーと値のペアを格納することができるコンテナデータ型です。空の辞書は、以下のようにして作成できます。
my_dict = {}
空の辞書も、空のリストと同様に、if文やwhile文の条件式に用いることができます。空の辞書はFalseとして評価されるため、以下のように条件分岐を行うことができます。
my_dict = {}
if my_dict:
print("my_dict is not empty")
else:
print("my_dict is empty")
空の集合
Pythonの集合は、重複のない要素を格納することができるコンテナデータ型です。空の集合は、以下のようにして作成できます。
my_set = set()
空の集合も、空のリストや辞書と同様に、if文やwhile文の条件式に用いることができます。空の集合はFalseとして評価されるため、以下のように条件分岐を行うことができます。
my_set = set()
if my_set:
print("my_set is not empty")
else:
print("my_set is empty")
空のタプル
Pythonのタプルは、リストと同様に複数の要素を順序付きで格納することができるコンテナ型です。空のタプルは、以下のようにして作成できます。
my_tuple = ()
空のタプルも、空のリストや辞書、集合と同様に、if文やwhile文の条件式に用いることができます。空のタプルはFalseとして評価されるため、以下のように条件分岐を行うことができます。
my_tuple = ()
if my_tuple:
print("my_tuple is not empty")
else:
print("my_tuple is empty")
ただし、空のタプルは他の空のコンテナ型と比較してあまり使われることはありません。これは、空のタプルを使う場合、通常は空のリストを代わりに用いることができるためです。タプルの主な用途は、イミュータブル(変更できない)なリストとして扱うことであり、空のタプルが必要となるケースは少ないです。
以上が、Pythonの空のコンテナデータ型についての解説です。空のコンテナデータ型を適切に扱うことで、コードの可読性を向上させることができます。
数値
Pythonにおいて、数値0はFalseとして扱われます。つまり、if文やwhile文で変数が0かどうかを判定することができます。
x = 0
if x:
print("x is not 0")
else:
print("x is 0")
上記の例では、変数x
が0であるため、if文の条件式がFalseと評価され、”x is 0″という文字列が出力されます。
以上が、Pythonにおいて変数それ自体が条件式として扱われる値の例です。これらの値を使うことで、コードを簡潔に記述することができます。
ただし、Pythonに慣れていない読み手にとっては意図が伝わりにくいので、必要に応じて適切なコメントを付けるなどして可読性を高めるようにしましょう。
リストや辞書などを作成するときに使うif文
Pythonでは、内包表記と呼ばれる、リストや辞書などのコンテナデータ型を簡潔に作成する方法があります。内包表記では、for文やif文を使って、コンテナデータ型の要素を作成する方法を提供しています。
内包表記では、if文を用いた条件式を使って、要素を取り出すかどうかを判断することができます。具体的には、以下のような形式をとります。
[式 for 要素 in イテラブルオブジェクト if 条件式]
ここで、式
は要素を作成する式、要素
はイテラブルオブジェクトから取り出される要素、イテラブルオブジェクト
はfor文で繰り返し処理されるオブジェクト、条件式
は要素を取り出すかどうかを判断する条件式です。
例えば、1から10までの整数のうち、偶数のみをリストに格納する場合、以下のように内包表記を使うことができます。
even_numbers = [n for n in range(1, 11) if n % 2 == 0]
print(even_numbers)
# 出力結果: [2, 4, 6, 8, 10]
このように、内包表記を使うことで、for文やif文を使った条件式を簡潔に表現することができます。内包表記はコードの可読性を向上させ、同じ処理をfor文やif文を使って表現するよりも簡潔でわかりやすいコードを書くことができます。
もっと深くまで知りたい場合はこちらで内包表記については詳細に解説しているので参考にしてみてください。
if文や条件式は知識だけでなく、どう使うかも重要
Pythonでは判定方法が様々で、人によって大きく書き方が違ったり、どう書くのが良いか迷うことも多いです。自由度が高い分、センスが問われる場面が多いです。最初の段階だとなかなか、感覚をつかむのが大変なので以下の記事で解説しているので参考にしてみてください。
コメント