Pythonの「if文」「if-else文」は、プログラミングの基本中の基本である「条件分岐」を行うために、欠かせない機能・構文です。if文を使いこなせるようになると、自由自在に処理を分岐できるようになり、高度な機能を実現できるようになります。本記事では、Pythonのif文・if-else文について、サンプルコード付きでわかりやすく解説します。
目次
Pythonの「if文」とは、条件分岐を行うための機能です。「条件分岐」は、ある条件を指定して、条件を満たす場合・満たさない場合で処理を分けることを指します。
たとえば、「あなたはPythonを学習していますか?」という質問に対する答えは、「はい」「いいえ」の2択です。Pythonでは「はい = True」「いいえ = False」として、プログラムの処理を分岐させます。
ユーザーが入力した数値の種類に応じて、True/Falseで処理を分けるというのは、最も基本的な条件分岐のひとつです。Pythonでは以下のサンプルコードのように、if-else文を用いて記述します。
//サンプルプログラム
# coding: Shift-JIS # ユーザーに整数値の入力を求める while True: str = input("整数値を入力してください:") # 整数値が入力されなかった場合は繰り返す if str.isdecimal(): # 整数値が入力された場合はint型に変換する num = int(str) break # if-else文で偶数か奇数かを判別する if num % 2 == 0: print(str + "は偶数です") else: print(str + "は奇数です")
//実行結果
こうした条件分岐の考え方は、Python以外のあらゆるプログラミング言語でも同じように存在します。だからこそ、if-else文による条件分岐は、プログラミングの基本中の基本だといえるのです。
Pythonのif文は、条件分岐の種類に応じて以下3つに分類できます。本章では、それぞれの使い方について解説します。
if文は「True」もしくは「False」の2択で処理を分岐できます。if文の基本的な構文は以下のとおりです。
if 条件式:
条件式がTrueのときに行う処理内容
重要なポイントは、条件式を満たす場合の処理内容を記述することと、そのときに「インデント」を下げることです。Pythonは、インデントによって処理のまとまりを作る言語なので、インデントを下げていないとエラーになります。なお、条件式を満たさない場合は、この処理内容は実行されません。実際に以下のサンプルコードで確認してみましょう。
//サンプルプログラム
# coding: Shift-JIS # ユーザーに整数値の入力を求める while True: str = input("整数値を入力してください:") # 整数値が入力されなかった場合は繰り返す if str.isdecimal(): # 整数値が入力された場合はint型に変換する num = int(str) break # if文で数値が偶数か判別する if num % 2 == 0: print("偶数が入力されました")
//実行結果
上記のサンプルプログラムは、ユーザーに整数値を入力してもらい、その値が偶数の場合に「偶数が入力されました」と表示するものです。なお、最初に「while文」がありますが、これはユーザーが整数値を入力するまで処理を繰り返すためのものです。if文で「str.isdecimal関数」の戻り値を判定することで、整数値かどうかを判定しています。正しい整数値が入力されたら、if文で「num」が偶数かをチェックします。
先ほどのif文は、条件式を満たす場合の処理を記述するためのものでした。一方「else文」は、条件式を満たさない場合の処理を記載します。else文は単独では使えないので、必ず「if-else文」とセットにして、以下の構文で使います。
if 条件式: 条件式がTrueのときに行う処理内容 else: 条件式がFalseのときに行う処理内容
条件を満たさない場合の処理を書く以外は、else文はif文と同じです。if文と同様に、インデントを下げる必要がある点に注意してください。if-else文の使い方を、以下のサンプルコードで確認しましょう。
//サンプルプログラム
# coding: Shift-JIS # ユーザーに整数値の入力を求める while True: str = input("整数値を入力してください:") # 整数値が入力されなかった場合は繰り返す if str.isdecimal(): # 整数値が入力された場合はint型に変換する num = int(str) break # if文で数値が偶数か奇数かを判別する if num % 2 == 0: print("偶数が入力されました") else: print("奇数が入力されました")
//実行結果
if文やif-else文は、基本的には「True」もしくは「False」の2択です。より複雑な条件分岐を行いたい場合は、「elif」文を使用します。elif文は、if文とelse文以外の選択肢を追加するためのもので、「if-elif-else文」と3つセットで使用します。if-elif-else文の構文は以下のとおりです。
if 条件式A: 条件式AがTrueのときに行う処理内容 elif 条件式B: 条件式BがTrueのときに行う処理内容 else: 条件式Aと条件式Bの双方がFalseのときに行う処理内容
elif文の使い方は基本的にif文と同じですが、elif文はいくつでも並べて書けることが特徴です。実際に以下のサンプルコードで、if-elif-else文を使ってみましょう。
//サンプルプログラム
# coding: Shift-JIS # ユーザーに整数値の入力を求める while True: str = input("整数値を入力してください:") # 整数値が入力されなかった場合は繰り返す if str.isdecimal(): # 整数値が入力された場合はint型に変換する num = int(str) break # if文で数値がどの値の倍数かを判別する if num % 2 == 0: print(str + "は2の倍数です") elif num % 3 == 0: print(str + "は3の倍数です") elif num % 5 == 0: print(str + "は5の倍数です") else: print(str + "は2・3・5の倍数ではありません")
//実行結果
上記のサンプルプログラムは、入力した値が2・3・5のいずれの倍数であるかを調べるためのものです。3の倍数と5の倍数を調べる部分は、elif文をつなげて記述しています。いずれにも該当しない場合は、else文の処理を実行することになります。
Pythonのif文を使いこなすためには、「比較演算子」について理解しておく必要があります。比較演算子は、2つの値を比較するためのもので、その結果は「True」もしくは「False」となります。Pythonで使える比較演算子は以下10種類です。
比較演算子 | 概要 |
---|---|
a == b | aはbと等しい |
a != b | aはbと等しくない |
a < b | aはbより小さい |
a > b | aはbより大きい |
a <= b | aはb以下 |
a >= b | aはb以上 |
a is b | aはbと等しい |
a is not b | aはbと等しくない |
a in b | aはbに含まれる |
a not in b | aはbに含まれない |
なお、「in」と「not in」については、文字列・リスト・タプルなど特殊なデータ型で使える比較演算子です。それぞれの比較演算子の使い方について、以下のサンプルコードで確認しましょう。
//サンプルプログラム
# coding: Shift-JIS # 2つの整数値を格納するためのリストを作成する str = [0] * 2 num = [0] * 2 # ユーザーに整数値の入力を求める for i in range(2): while True: str[i] = input("整数値を入力してください:") # 整数値が入力されなかった場合は繰り返す if str[i].isdecimal(): # 整数値が入力された場合はint型に変換する num[i] = int(str[i]) break # if文で数値がどの値の倍数かを判別する if num[0] == num[1]: print(str[0] + "は" + str[1] + "と等しいです") elif num[0] != num[1]: print(str[0] + "は" + str[1] + "と等しくありません") if num[0] < num[1]: print(str[0] + "は" + str[1] + "より小さいです") elif num[0] > num[1]: print(str[0] + "は" + str[1] + "より大きいです") elif num[0] <= num[1]: print(str[0] + "は" + str[1] + "以下です") elif num[0] >= num[1]: print(str[0] + "は" + str[1] + "以上です") if num[0] is num[1]: print(str[0] + "は" + str[1] + "と等しいです") elif num[0] is not num[1]: print(str[0] + "は" + str[1] + "と等しくありません") else: print(str[0] + "と" + str[1] + "はいずれにも該当しない関係です") # テスト用リストを作成する list = [1, 2, 3] # リスト内に「1」が含まれているか調べる if 1 in list: print("リストに「1」は含まれています") else: print("リストに「1」は含まれていません") # リスト内に「100」が含まれているか調べる if 100 not in list: print("リストに「100」は含まれていません") else: print("リストに「100」は含まれています")
//実行結果
これらの比較演算子は、Pythonでif文を使うときに頻繁に使うので、必ず覚えておきましょう。
先ほど紹介した比較演算子に加えて、「論理演算子」についても理解しておくと、より高度な条件分岐ができます。論理演算子は、複数の条件式を組み合わせて条件を分岐させるためのもので、比較演算子と同じように「True」もしくは「False」を返します。Pythonでは、以下3つの論理演算子を使うことが可能です。
論理演算子 | 概要 |
---|---|
a and b | aとbの双方が真であれば「True」を返す |
a or b | aとbの一方が真であれば「True」を返す |
not a | aが偽であれば「True」を返す |
双方の条件がTrueであることを求める場合は「and」で、他方がTrueであればOKな場合は「or」を使います。なお「not」は条件を否定、つまり逆にするための演算子です。たとえば「not (a % 2 == 0)」と書けば、「aは偶数ではない」すなわち「aは奇数である」ことを調べる条件式となります。詳細は以下のサンプルコードのとおりです。
//サンプルプログラム
# coding: Shift-JIS # 2つの整数値を格納するためのリストを作成する str = [0] * 2 num = [0] * 2 # ユーザーに整数値の入力を求める for i in range(2): while True: str[i] = input("整数値を入力してください:") # 整数値が入力されなかった場合は繰り返す if str[i].isdecimal(): # 整数値が入力された場合はint型に変換する num[i] = int(str[i]) break # if文で各数値が偶数か奇数かを調べる if (num[0] % 2 == 0) and (num[1] % 2 == 0): print(str[0] + "と" + str[1] + "の双方が偶数です") elif (num[0] % 2 == 0) or (num[1] % 2 == 0): print(str[0] + "と" + str[1] + "の一方が偶数です") elif not (num[0] % 2 == 0) and not (num[1] % 2 == 0): print(str[0] + "と" + str[1] + "の双方が奇数です") else: print(str[0] + "と" + str[1] + "の関係は特殊です")
//実行結果
論理演算子は、複数の条件を組み合わせて処理を分岐させる場合に、必ず使います。比較演算子と組み合わせることがほとんどなので、上記のようなサンプルプログラムで比較演算子・論理演算子の組み合わせ方を覚えておきましょう。
if文の中に別のif文を書くことを「ネスト」もしくは「入れ子」と呼びます。Pythonでは以下のサンプルコードのように、if文をネストさせることが可能です。
//サンプルプログラム
# coding: Shift-JIS # forループで0から15までの整数値を表示する for i in range(16): # 3の倍数もしくは5の倍数であるか調べる if i % 3 == 0 or i % 5 == 0: # 3の倍数であれば「foo」と表示する if i % 3 == 0: print("foo", end="") # 5の倍数であれば「bar」と表示する if i % 5 == 0: print("bar", end="") # いずれにも該当しない場合は数値を表示する else: print(i, end="") # 改行を挟む print();
//実行結果
上記のサンプルプログラムは、0から15までの数値のうち、3の倍数は「foo」・5の倍数は「bar」・15の倍数は「foobar」・それ以外は数値を表示するというもの。このように、最初に大まかな条件を設定してから絞り込む場合、if文をネストさせると便利です。
ただし、あまり深い階層までif文をネストさせると、プログラムの可読性が低下してわかりにくくなります。そのため、基本的には前述した論理演算子を活用して、if文のネストが深くなりすぎないようにするのが理想です。
Pythonのif文を使うときは、以下3つの構文・テクニックを知っておくと、より便利に使いこなせます。
「三項演算子」を使うと、if-else文をより簡潔に記載できます。三項演算子の構文は以下のとおりです。
真の場合の処理 if 条件式 else 偽の場合の処理
以下のサンプルコードは、入力した値が偶数か奇数かを判定するコードを、三項演算子を使ってより簡潔にしたものです。
//サンプルプログラム
# coding: Shift-JIS # ユーザーに整数値の入力を求める while True: str = input("整数値を入力してください:") # 整数値が入力されなかった場合は繰り返す if str.isdecimal(): # 整数値が入力された場合はint型に変換する num = int(str) break # 三項演算子で数値が偶数か奇数かを判別する print(("偶数" if num % 2 == 0 else "奇数") + "が入力されました")
//実行結果
上記のサンプルプログラムのように、if-else文を使う場合と比べて、三項演算子はソースコードが簡潔になります。しかし、場面によってはかえって可読性が低下することがあるので、多用しすぎないように注意が必要です。
繰り返し処理を行うfor文では、途中で終了しないといけない場合があります。そのときは以下のように、if文で条件を指定したうえで「break」を記載すると、以降すべての処理をスキップできます。
//サンプルプログラム
# coding: Shift-JIS # 整数値をリストに格納する nums = [1, 2, 3, 4, 5] # for文でリストの全要素を表示する for i in nums: # iの値が「3」になったらループを抜ける if i == 3: break # リストの要素を表示する print(i)
//実行結果
「i == 3」以降のすべてのループ処理が行われていませんが、これは「break」でループ処理そのものが終了することが理由です。
breakは以降のループ処理すべてを終了させますが、「continue」特定の値のときだけ処理をスキップできます。以下のサンプルコードのように、if文で条件を指定したうえで「continue」を記載しましょう。
//サンプルプログラム
# coding: Shift-JIS # 整数値をリストに格納する nums = [1, 2, 3, 4, 5] # for文でリストの全要素を表示する for i in nums: # iの値が「3」のときだけ処理をスキップする if i == 3: continue # リストの要素を表示する print(i)
//実行結果
breakのときとは異なり「4」以降の値が表示されていますが、これはcontinueが「i == 3」のときだけ処理だけをスキップしたことが理由です。
Pythonのif文は、プログラムの条件分岐を行うための機能で、臨機応変な処理を行うために必須です。比較演算子や論理演算子と組み合わせることで、あらゆるパターンの条件分岐が実現でき、さまざまな機能を実装できるようになります。今回解説した知識やテクニックをふまえて、Pythonのif文を活用してみてください。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール