sec03 - Pythonの条件分岐(if文)入門|初心者でもわかる基本とコード例
スポンサーリンク

Pythonの条件分岐とは?if文の基本を初心者向けに解説

プログラムは通常、上から下へ順番に実行されます。これを「順次実行」と呼びます。

しかし、現実の判断には「もし〜なら」のような条件に応じた分岐が必要です。そこで使うのが条件分岐(if文)です。

条件分岐は、プログラムが「状況に応じて動作を変える」ための仕組みで、「もし雨なら傘を持つ」「晴れていたら散歩する」といった、現実の判断をプログラムで表現できます。ある条件が満たされているときだけ実行する処理や、いくつかの候補から最初に当てはまったものだけ実行するといった柔軟な動作が可能になります。

if / elif / else の意味と使い方をわかりやすく解説

条件分岐に使うキーワードは3つあります。

  • if
    • 「もし〜なら」という意味で、1番最初の条件をチェックします。
    • ifの行に書いた条件がTrueの場合(条件を満たした場合)に、その直下のインデントされた処理が実行されます。
    • 条件がFalseの場合(条件を満たさない場合)は、ifのブロックの処理は行われません。
    • 条件分岐の先頭に必ず記述します。
  • elif
    • 「else if(それ以外で、もし〜なら)」の短縮で、ifの条件が満たされなかったときに追加で別の条件をチェックするためのキーワードです。elifは何個でも並べられます。
    • elifは必須ではありません。
  • else
    • 「どれにも当てはまらない場合」の処理を書くためのキーワードです。条件は書きません。ifelifのどれにも当てはまらない場合にelseのブロックが実行されます。
    • elseは必須ではありません。

ifは最初の布石、elifはその後に続く追加のチェックです。ifTrueならelifはチェックされずスキップされます。(最初に当たったものだけ実行されます。)

スポンサーリンク

Pythonでの条件分岐の基本形|コロンとインデントの使い方

Pythonでの条件分岐の基本形は次の通りです。コロン(:)とインデントを忘れないことが非常に重要です。

if 条件A:
    処理A-1  # インデント(空白4つ)を付ける
    処理A-2  # 同じ深さのインデントに揃える
elif 条件B:
    処理B-1  # これは、elif(条件B)の条件を満たしたときの処理
    処理B-2
    処理B-3  # ここまで、条件Bのブロック
elif 条件C:
    処理C  # elifは幾つでも設定できる
else:
    処理D  # どの条件も満たさなかったときの処理

ここでの大事なポイント:

  • 条件num > 0のような比較式や、bool(ブール)値を返す式を書きます。
    • bool値に関しては、専用のレクチャーで学習します。
    • このレクチャーで出てくる比較式は次の通りです。
      • A > B : 「AがBより大きい」場合にTrueになります。AとBがイコールの場合はFalseになります。
      • A >= B : 「AがB以上」の場合にTrueになります。AとBがイコールの場合もTrueになります。
      • A == B : 「AとBの値が同じ」場合にTrueになります。
  • :(コロン)で条件式の終わりを示します。
  • if/ elif/ elseの条件を満たしたときの処理を、インデントを付けて記述します。
    • インデントが解除されるまで、条件を満たしたときに実行する処理とみなされます。
  • elifelseは省略可能で、用途に合わせて使います。
    • elifは幾つでも設定できます。
    • elseは1番最後に1回だけ設定できます。

Pythonのインデントとは?初心者でもわかる字下げのルール

Pythonのインデントとは?基本ルールと例

Pythonは、インデント(字下げ)を使って『ifの条件を満たしたときの処理の範囲(ブロック)』『elifの条件を満たしたときの処理のブロック』...を管理しています。

他の言語では{}(波カッコ)でブロックを示すことが多いですが、Pythonでは字下げそのものがブロックの境界として認識されます。ですので、インデントが正しくないと、どのコードがどの条件のブロックなのか、Pythonが判断できずにエラーになります。

インデントは半角スペース4つが基本です。(Visual Studio Codeでは、TABキーを押すと、半角スペース4つ分のインデントが挿入されます。)

正しいインデント例|Python if文のブロックの書き方

Pythonは同じ深さのインデントが続く限り、同じブロックと認識します。なお、ブロックの中に空行があった場合、その空行の後に同じ深さのインデントの行が続けば、同じブロックとして認識されます。

インデントを解除する(元の深さに戻す)と、ifの処理の範囲外と認識されます。

num = 10  # numの値を書き換えて、処理の流れを確認してみましょう

if num > 0:
    # インデントが4スペースで揃っている
    print("正の数です")

    print("これも if の中の処理です")
print("これは if の外の処理です")

上記コードの処理の順序(numが10だった場合)

  1. 1行目でnum = 10を代入
  2. if num > 0:を評価 →10 > 0True(条件を満たす)
  3. インデントされた2行のprintを順に実行
    • 同じ深さのインデントが続く限り処理される
  4. インデント外のprintを実行して終了
# 実行結果 #
正の数です
これも if の中の処理です
これは if の外の処理です

上記コードの処理の順序(numが-5だった場合)

  1. 1行目でnum = -5を代入
  2. if num > 0:を評価 →-5 > 0False(条件を満たさない)
  3. インデントされた行は実行されない
  4. インデント外のprintを実行して終了
# 実行結果 #
これは if の外の処理です

インデント忘れNG例|Python初心者がつまずくポイント

ifの直下の処理にインデントがないため、Pythonが構文エラーを出します。初学者が最初につまずく代表例です。

if num > 0:
print("正の数です")  # IndentationErrorになる

インデントの深さがバラバラのNG例と解決法

ifのブロックの中は常に同じ深さのインデントで揃える必要があります。ブロック内のインデントが統一されていないと、IndentationError(字下げエラー)になります。

# NGな例
if num > 0:
    print("正の数です")
      print("これも正の数です")  # スペースの数が揃っていないのでエラー
   print("これも正の数です")  # スペースの数が揃っていないのでエラー

# OKな例
if num > 0:
    print("正の数です")
    print("これも正の数です")  # OK: スペース4つで揃えられている
    print("これも正の数です")  # OK: スペース4つで揃えられている

実際に動かせるPython条件分岐のコード例

if文のみのコード例|条件に当てはまったときだけ処理

if文の条件を満たしたときだけ、処理を実行します。条件に当てはまらなければ、ifのブロックの中の処理は行われません。

num = 10  # numの値を書き換えて、処理の流れを確認してみましょう

if num > 0:
    print("numは正の数です")

このプログラムの処理順 (num=10の場合)

  1. num = 10を評価して変数numに10を代入する。
  2. if num > 0:を評価する(10 > 0True)。
  3. 条件がTrueなので、インデントされたprint("numは正の数です")を実行する。
  4. 以降、他に実行する処理がなければプログラム終了。

このプログラムの処理順 (num=-5の場合)

  1. num = -5を評価して変数numに-5を代入する。
  2. if num > 0:を評価する(-5 > 0False)。
  3. 条件がFalseなので、インデントされたprint("numは正の数です")実行されない
  4. 以降、他に実行する処理がなければプログラム終了。

if + elseのコード例|条件に当てはまらない場合の処理

最初のifの条件に当てはまらなかったときは「else(それ以外)」が動きます。elseは「条件に当てはまらない場合すべて」をカバーします。

num = -3

if num > 0:
    print("正の数")
else:
    print("ゼロか負の数")

このプログラムの処理順

  1. num = -3を代入。
  2. if num > 0:を評価 →-3 > 0False
  3. ifのブロックはスキップされ、elseのブロックに移動する。
  4. print("ゼロか負の数")を実行する。
  5. プログラム終了。

if + elifのコード例|複数条件を順番にチェック

複数の条件を順番にチェックしたいときはelifを使います。

num = 0

if num > 0:
    print("正の数")
elif num == 0:
    print("ゼロ")

このプログラムの処理順

  1. num = 0を代入。
  2. if num > 0:を評価 →0 > 0False
  3. elif num == 0:を評価 →0 == 0True
  4. print("ゼロ")を実行する。
  5. プログラム終了。

このコードにはelseがないため、もしnumが負の数だった場合は「どの条件にも当てはまらない」ことになり、結果として何も出力されずにプログラムが終了します。

if + elif + elseのコード例|複数条件の包括的分岐

elifは何個でも追加できます。最後にelseをつければ「どれにも当てはまらない場合」も書けます。

# 例: scoreに応じて評価を表示
score = 75

if score >= 80:
    print("Excellent")  # 優秀
elif score >= 60:
    print("Pass")  # 合格
elif score >= 40:
    print("Make-up Exam")  # 補講
else:
    print("Fail")  # 不合格

このプログラムの処理順

  1. score = 75を代入。
  2. if score >= 80:75 >= 80False
  3. elif score >= 60:75 >= 60True
  4. print("Pass")を実行する。
  5. プログラム終了。

上記コード例では、score >= 60の行がTrueになった時点で、それ以後のelif score >= 40else評価されずスキップされます。(最初に当たったものだけが実行されます。)

if/ elif/ elseは、『上から順に評価して、最初にTrueになったブロックだけが実行される』という挙動を理解することが非常に重要です。

Python条件分岐でよくある間違いと注意点

Pythonでコロン(:)を忘れるとエラーになる理由

ifの行の最後に:を書くことを忘れないようにしましょう。忘れると構文エラーになります。

# NG(エラー)
if num > 0  # ← コロンがないとSyntaxError
    print("...")

条件の順序ミスに注意|Python if文の評価順

閾値チェックをする場合は、数値が大きい条件から順に書くのが基本です。誤った順にすると上位の条件で捕まってしまい、下の条件が実行されなくなります。

# 間違った例(想定外の結果になる)
score = 85  # 本当は"Excellent"

if score >= 60:   # ここでTrueになってしまい、"Excellent"ではなく"Pass"になってしまう
    print("Pass")
elif score >= 80:
    print("Excellent")

上記のような、評価を順番に付けていく例の場合、大きい条件(厳しい条件)から順に書くことで、想定通りの分岐が行われます。例えば>= 80,>= 60,>= 40...という順に条件を確認していけば、想定通りの結果になります。

if~elifとif-ifの違い|条件分岐の挙動を理解しよう

次の2つの例は似ていますが、一方はif~elifを使い、もう一方はifのみで構成されています。

if~elifを使っている方は、score = 85に対して"Excellent"と結果がでますが、ifのみで構成すると"Pass"が結果として出力されます。フローチャート図で処理の流れを確認しましょう。

# if ~ elif
score = 85

if score >= 80:   # ここでTrueになり、elifのブロックは実行されない("Excellent"で確定する)
    result = "Excellent"
elif score >= 60:
    result = "Pass"

print(result)  # "Excellent"が出力される

elifは、それよりも前のifelifの条件が満たされた場合は評価されずにスキップされます。ですので、if score >= 80:Trueになると、"Excellent"が確定します。

# if のみ
score = 85

if score >= 80:   # ここでTrueになり、resultに"Excellent"が代入される
    result = "Excellent"
if score >= 60:   # ここでもTrueになり、resultに"Pass"が代入される
    result = "Pass"

print(result)  # "Pass"が出力される

ifは、それよりも前のif文の結果に関わらず、新規に評価が始まります。最初のif文の評価が終わるとフローチャート図の"本線"に戻り、2つ目のif文の評価が始まります。

スポンサーリンク