Pythonの条件分岐 (if, elif, else): 基本的な使い方とエラー・対処法

Pythonで条件に応じた処理を行う条件分岐の構文( if, elif, else )について解説します。

条件分岐の基本

Pythonの条件分岐は if 文、elif (else if) 文、そして else 文を組み合わせて記述します。

if 条件式1:
    # 条件式1が True の場合に実行
elif 条件式2:
    # 条件式1が False かつ 条件式2が True の場合に実行
else:
    # どの条件式も False の場合に実行

各要素の役割は以下の通りです。

  • if: 条件式を記述し、True の場合に続く処理ブロックを実行します。
  • elif: if の条件が False の場合に、さらに別の条件を評価します。複数記述可能です。
  • else: ifelif の全ての条件が False の場合に実行する処理を記述します。
  • インデント: Python ではインデント(通常はスペース4つ)が構文の一部です。インデントが誤っているとエラーが発生します。

条件分岐のサンプルコード

年齢に応じたメッセージ出力

年齢に応じて異なるメッセージを出力する例を見てみましょう。

age = 20

if age < 20:
    print("未成年です")
elif age < 65:
    print("成人です")
else:
    print("高齢者です")

このコードでは、age 変数の値に応じて、"未成年です"、"成人です"、"高齢者です" のいずれかが出力されます。 elif age < 65: の条件では、 age >= 20 であることが暗黙的に前提となっているため、条件式を省略できます。

よくあるエラーと対処法

エラーの種類 エラー例 対処法
IndentationError if age < 20:
print("未成年")
インデントを修正 (通常はスペース4つ)
TypeError (論理演算) if age >= 20 & age < 65: 論理演算子 (and, or, not) を使用
SyntaxError (比較演算) if age = 20: 比較演算子 (==, !=, <, >, <=, >=) を使用
TypeError (型比較) if age < "20": 比較する値の型を合わせる (例: int(age) で文字列を整数に変換、"20"20 に修正)
SyntaxError (条件式) if x =< 10 演算子の順序や記述 (x <= 10) を修正
else の未記述 if/elif のみで、網羅的な条件分岐がない else を追加するか、条件を見直して else が不要な状態にする

エラーの詳細と具体例

上記のエラーについて、エラーメッセージ、原因、対処法、コード例を詳しく解説します。

1. IndentationError: expected an indented block

エラーメッセージ例

  File "<stdin>", line 2
    print("未成年です")
        ^
IndentationError: expected an indented block

原因: if, elif, else 行の後にインデントされたコードブロックがない場合に発生します。

対処法: インデントを追加します (スペース4つ)。

コード例

# エラー例 (IndentationError)
age = 20
if age < 20:
print("未成年です") # インデントがないためエラー

# 修正後
age = 20
if age < 20:
    print("未成年です") # インデントを追加

2. TypeError: unsupported operand type(s) for &: 'int' and 'int'

エラーメッセージ例

TypeError: unsupported operand type(s) for &: 'int' and 'int'

原因: 論理演算子 and の代わりにビット演算子 & を使用している場合に発生します。

対処法: 論理演算子 and を使用します。

コード例

# エラー例 (TypeError: ビット演算子 '&' の誤用)
age = 30
if age >= 20 & age < 65: # 論理積 'and' のつもりでビット演算子 '&' を使用
    print("成人です")

# 修正後
age = 30
if age >= 20 and age < 65: # 論理演算子 'and' を使用
    print("成人です")

3. SyntaxError: invalid syntax (比較演算子の間違い)

エラーメッセージ例

  File "<stdin>", line 2
    if age = 20:
           ^
SyntaxError: invalid syntax

原因: 比較演算子 == の代わりに代入演算子 = を使用している場合に発生します。

対処法: 比較演算子 == を使用します。

コード例

# エラー例 (SyntaxError: 代入演算子 '=' の誤用)
age = 20
if age = 20: # 比較のつもりで代入演算子 '=' を使用
    print("20歳です")

# 修正後
age = 20
if age == 20: # 比較演算子 '==' を使用
    print("20歳です")

4. TypeError: '<' not supported between instances of 'str' and 'int'

エラーメッセージ例

TypeError: '<' not supported between instances of 'str' and 'int'

原因: 文字列型 (str) と 整数型 (int) のように、比較できない型同士を比較しようとした場合に発生します。

対処法: 比較する前に int() などで型を統一します。

コード例

# エラー例 (TypeError: 型が異なる変数の比較)
user_input = input("年齢を入力してください: ") # input() は文字列型を返す
if user_input < 18: # 文字列型と整数型を比較 (エラー)
    print("未成年です")

# 修正後
user_input = input("年齢を入力してください: ")
try:
    age = int(user_input) # 文字列型を整数型に変換
    if age < 18: # 整数型同士を比較
        print("未成年です")
    else:
        print("成人です")
except ValueError:
    print("エラー: 整数を入力してください。")

ここでは、input() 関数から受け取った文字列を int() 関数で整数に変換しています。 try-except ブロックで、ユーザーが整数以外の値を入力した場合のエラー処理も追加しています。

発展: 三項演算子

Python では、条件分岐をより簡潔に記述できる三項演算子 (conditional expression) が利用できます。

# 三項演算子の例
age = 20
message = "未成年です" if age < 20 else "成人です" # 条件式が True なら左辺、False なら右辺
print(message)

三項演算子を使うと、シンプルな条件分岐を1行で記述できます。コードを簡潔にしたい場合に有効です。

[PR] Pythonの基礎学習に利用できるUdemyサイトを紹介します。

click.linksynergy.com

click.linksynergy.com