2-3

条件分岐

インデントによる構文

Pythonでは、インデント(字下げ)によってコードブロックを表します。インデントには4スペースを使うのが一般的です。

python
if True:    print("これはインデントされています")  # このブロックは実行される    print("ここも同じブロック")print("これはインデント外")  # if とは無関係

重要: Pythonのインデントは構文の一部です。インデントが正しくないと IndentationError が発生します。

python
if True:print("IndentationError!")   # エラー: インデントがない

if … else による条件分岐

else を使うと、条件が False のときの処理を記述できます。

python
def classify_number(x):    if x >= 0:        return "非負の数"    else:        return "負の数"classify_number(5)    # "非負の数"classify_number(-3)   # "負の数"classify_number(0)    # "非負の数"

if … else の短縮形

単純な場合は、条件式(三項演算子)で一行に書けます。

python
x = 10result = "正" if x > 0 else "0以下"result   # "正"

if … elif … else による条件分岐

複数の条件を順番に確認したい場合は elif を使います。

python
def grade(score):    if score >= 90:        return "A"    elif score >= 80:        return "B"    elif score >= 70:        return "C"    elif score >= 60:        return "D"    else:        return "F"grade(95)   # "A"grade(83)   # "B"grade(72)   # "C"grade(55)   # "F"

ポイント: elif は上から順に評価されます。最初に True となった条件のブロックが実行され、残りはスキップされます。

if / elif / else の評価フローscore >= 90?TAFscore >= 80?TBFscore >= 70?TCFF← else→ 次へ

条件の順序に注意

python
def classify(x):    # 悪い例:条件の順序が間違っている    if x > 0:        return "正の数"    elif x > 100:        # ここには絶対に到達しない!        return "大きな数"
python
def classify(x):    # 良い例:より厳しい条件を先に書く    if x > 100:        return "大きな数"    elif x > 0:        return "正の数"    elif x == 0:        return "ゼロ"    else:        return "負の数"

ネストした条件分岐

if 文の中に if 文を入れ子(ネスト)にすることができます。ただし、深くなりすぎるとコードが読みにくくなるため注意が必要です。

python
def classify_triangle(a, b, c):    """三角形の種類を返す"""    # まず三角形が成り立つか確認    if a + b <= c or b + c <= a or c + a <= b:        return "三角形ではない"    # 正三角形    if a == b == c:        return "正三角形"    # 二等辺三角形    if a == b or b == c or c == a:        return "二等辺三角形"    # 直角三角形(辺の長さが整数の場合)    sides = sorted([a, b, c])    if sides[0]**2 + sides[1]**2 == sides[2]**2:        return "直角三角形"    return "不等辺三角形"classify_triangle(3, 4, 5)     # "直角三角形"classify_triangle(5, 5, 5)     # "正三角形"classify_triangle(5, 5, 3)     # "二等辺三角形"classify_triangle(1, 2, 10)    # "三角形ではない"

練習: fizzbuzz

基礎

整数 n を受け取り、以下のルールで文字列を返す関数 fizzbuzz(n) を定義してください。

  • n が3の倍数なら "Fizz"
  • n が5の倍数なら "Buzz"
  • n が3と5の両方の倍数なら "FizzBuzz"
  • それ以外は n を文字列に変換して返す

練習: season

基礎

月番号(1〜12)を受け取り、季節を返す関数 season(month) を定義してください。

  • 3〜5月: 「春」
  • 6〜8月: 「夏」
  • 9〜11月: 「秋」
  • 12〜2月: 「冬」