Python 入門

Python 条件分岐

条件分岐(Conditional Statements)は、プログラムが特定の条件に基づいて意思決定を行い、異なるコードの実行パスを選択することを可能にします。

条件分岐はコードに論理(ロジック)と柔軟性をもたらし、さまざまなインプットや状況に動的に反応できるようにします。条件分岐がなければ、プログラムは処理するデータに関わらず、毎回全く同じ命令シーケンスを繰り返すだけになってしまいます。

本章では、Python における ifelif、および else ステートメントについて包括的に解説し、より複雑で適応力の高いプログラムを作成するために必要なツールを提供します。

1. if 文:条件付きでコードを実行する

if 文は、条件付き実行の最も基本的な形式です。特定の条件が真(True)である場合にのみ、特定のコードブロックを実行することを可能にします。構文は非常にシンプルです。

if condition:
    # もし条件が真(True)なら、このコードが実行される

ここでの condition(条件)は、計算結果が True または False になる式(Expression)です。条件が True の場合、if 文の下にあるインデントされたコードブロックが実行されます。条件が False の場合、そのブロックはスキップされます。

1.1 if の基礎例

まずはシンプルな例から見てみましょう。

age = 20
if age >= 18:
    print("あなたには投票権があります。")  # ageが20なので、この行は実行される

この例では、条件 age >= 18 の計算結果が True になります。なぜなら age の値は 20 であり、18 以上だからです。その結果、print 文が正常に実行されます。

次に、条件が False になるケースを見てみましょう。

age = 16
if age >= 18:
    print("あなたには投票権があります。")  # ageが16なので、この行は実行されない

ここでは、条件 age >= 18 の結果は False です。その結果、print 文はスキップされ、コンソールには何も表示されません。

1.2 比較演算子の使用

if 文の条件には、通常 比較演算子(Comparison Operators) が使われます。これらの演算子により、異なる値を比較してその関係性を判断できます。以下はよく使われる比較演算子のおさらいです。

演算子意味
==等しい
!=等しくない
>より大きい
<より小さい
>=以上
<=以下

これらの演算子を使用したコード例を見てみましょう。

x = 10
y = 5

if x > y:
    print("x は y より大きい")  # 出力: x は y より大きい

if x != y:
    print("x は y と等しくない")  # 出力: x は y と等しくない

if x == y:
    print("x は y と等しい")  # この行は実行されない

1.3 インデントの重要性

Python では、インデント(Indentation / 字下げ) を使用してコードブロックを定義します。if 文の下にあるコードブロックは必ずインデントされていなければなりません。標準的なインデントは「半角スペース4つ」です。不適切なインデントは構文エラー(SyntaxError)の原因となります。

age = 25
if age > 18:
    print("なななあなたは成人です。")
    print("運転することができます。")  # これら2行は両方とも 'if' ブロックの一部
age = 15
if age > 18:
    print("あなたは成人です。")
print("あなたは成人ではありません。") # この行は 'if' ブロックの外にあるため、常に実行される

2番目の例では、年齢がいくつであっても「あなたは成人ではありません。」というメッセージが常にプリントされます。なぜなら、この行にはインデントがなく、if 文によって制御されるコードブロックに属していないからです。

2. else 文:代替案を提供する

else 文は、if 文の条件が False だった場合に実行される代替のコードブロックを提供します。構文は以下の通りです。

if condition:
    # 条件が真の場合、このコードを実行
else:
    # 条件が偽の場合、このコードを実行

2.1 else の基礎例

先ほどの投票権の例に、else 文を加えてみましょう。

age = 16
if age >= 18:
    print("あなたには投票権があります。")
else:
    print("あなたにはまだ投票権がありません。")  # 出力: あなたにはまだ投票権がありません。

この場合、age が 16 なので条件 age >= 18False です。そのため、else 文の下のブロックが実行されます。

2.2 if と else の組み合わせ

ifelse はセットで機能し、「どちらか一方」を実行する分岐(二者択一)を提供します。両方が実行されることも、両方がスキップされることもありません。

number = 7
if number % 2 == 0:
    print("この数字は偶数です。")
else:
    print("この数字は奇数です。")  # 出力: この数字は奇数です。

ここでは %(剰余演算子)が割り算の余りを返します。余りが 0 なら偶数、そうでなければ奇数と判断しています。

3. elif 文:複数の条件を処理する

elif 文("else if" の略)を使用すると、複数の条件を順番にチェックできます。3つ以上の異なる結果を扱いたい場合に非常に便利です。

構文は以下の通りです。

if condition1:
    # condition1 が真なら実行
elif condition2:
    # condition1 が偽で、condition2 が真なら実行
elif condition3:
    # condition1, 2 が偽で、condition3 が真なら実行
else:
    # すべての条件が偽なら実行

elif 文は必要な数だけ繋げることができます。プログラムは条件を上から順にチェックし、最初に True になった条件のブロックだけを実行します。それ以降の条件はチェックされません。

3.1 elif の基礎例

学生のスコアに基づいて成績(グレード)を決定するプログラムを書いてみましょう。

score = 85

if score >= 90:
    print("成績: A")
elif score >= 80:
    print("成績: B")  # 出力: 成績: B
elif score >= 70:
    print("成績: C")
elif score >= 60:
    print("成績: D")
else:
    print("成績: F")

この例では、score が 85 なので最初の score >= 90False です。次の score >= 80True なので、"成績: B" がプリントされ、残りの elif や else はすべてスキップされます。

3.2 順番が極めて重要

elif の条件を並べる順番は非常に重要です。順番を間違えると、意図しない結果を招くことがあります。

以下の例を見てください。

temperature = 75

if temperature > 80:
    print("とても暑い!")
elif temperature > 60:
    print("暖かいですね。")  # 出力: 暖かいですね。
elif temperature > 40:
    print("過ごしやすい天気です。")
else:
    print("寒いです。")

もし、この elif の順番を入れ替えてしまうとどうなるでしょうか?

temperature = 75

if temperature > 40:
    print("過ごしやすい天気です。")  # 出力: 過ごしやすい天気です。
elif temperature > 60:
    print("暖かいですね。")
elif temperature > 80:
    print("とても暑い!")
else:
    print("寒いです。")

2番目の例では、"過ごしやすい天気です。" と表示されてしまいます。なぜなら、最初の条件 temperature > 40True(75は40より大きい)であるため、その後の条件は一切チェックされないからです。条件は「より具体的、または限定的なもの」から順に並べるのが基本です。

3.3 if、elif、else の総合利用

これらを組み合わせることで、複雑な意思決定構造を作成できます。else 文は省略可能ですが、どの条件にも当てはまらなかった場合の例外処理として記述しておくのが良いプログラミング習慣です。

age = 12

if age < 13:
    print("あなたは子供です。")  # 出力: あなたは子供です。
elif age < 20:
    print("あなたは十代(ティーンエイジャー)です。")
else:
    print("あなたは成人です。")

4. ネストされた条件分岐

条件分岐の中に、さらに別の条件分岐を入れることもできます。これを「ネスト(入れ子)」と呼びます。

x = 10
y = 5

if x > 0:
    print("x は正の数です。")  # 出力: x は正の数です。
    if y > 0:
        print("y も正の数です。")  # 出力: y も正の数です。
    else:
        print("y は正の数ではありません。")
else:
    print("x は正の数ではありません。")

この例では、まず外側の if 文で x が正かどうかをチェックし、それが真であれば内側の if 文でさらに y の状態をチェックしています。

4.1 深すぎるネストは避ける

ネストは便利ですが、あまりに深くなると(3階層、4階層…)、コードが非常に読みづらくなり、理解が困難になります。通常は、論理演算子(andor など)を使って条件をまとめたり、コードを小さな関数に分割したりすることで、複雑なロジックをシンプルに保つことが推奨されます。