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:ifとelifの全ての条件が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サイトを紹介します。