
Pythonで処理の流れを制御する上で、if文による条件分岐は欠かせません。この記事では、if / elif / else の構文だけでなく、実務レベルで使いこなすための使い分けや記述ミスの落とし穴まで、体系的に解説します。
Pythonの基礎
🟣 Pythonの基礎知識(入門編)
📌はじめてでも安心!Pythonで「動く感動」を味わえる超やさしい入門ステップ
🟣Pythonの基礎知識(基礎編)
📌基本文法から実用テクニックまで、Pythonの土台をしっかり固めるステップアップ講座
├─【Pythonの基礎知識】Pythonのデータ型を正しく使いこなす!
├─【Pythonの基礎知識】条件分岐の完全理解(if, elif, else)
├─【Pythonの基礎知識】繰り返し処理の深掘り(for, while)
├─【Pythonの基礎知識】Pythonコレクション型の正しい選び方
├─【Pythonの基礎知識】関数を使ってコードを整理しよう
├─【Pythonの基礎知識】try-exceptで学ぶPythonの例外処理
├─【Pythonの基礎知識】Pythonのファイル操作を完全理解
├─【Pythonの基礎知識】モジュールとライブラリを使う方法
├─【Pythonの基礎知識】Pythonのクラスとオブジェクトを最初に学ぶ
└─【Pythonの基礎知識】よく使う内蔵関数のまとめ
🟣Pythonの基礎知識(実践編)
📌知識を活かす実践編!ミニアプリや業務自動化で「できる」を実感できる構成
条件分岐とは?
プログラムの処理を「条件によって分ける」ことを条件分岐と呼びます。Pythonにおける条件分岐は、if文を中心に構成されており、コードの流れを制御する上で欠かせない要素です。
たとえば「数値が0より大きければAを実行、それ以外ならBを実行する」といった分岐は、if文なしでは実現できません。このセクションでは、条件分岐の基本的な概念から、その重要性までを整理します。
if文の役割と使用場面
Pythonのif文は、「ある条件が真であるかどうか」によって処理の流れを変える仕組みです。真(True)であればそのブロックを実行し、偽(False)であればスキップします。
この機能により、ユーザーの入力値に応じて表示を変えたり、エラーがあるかを判断したりと、柔軟なプログラム制御が可能になります。
score = 80
if score >= 70:
print("合格です")
この例では、スコアが70以上であれば「合格です」と表示されます。条件を満たさない場合は何も出力されません。
else / elif の基本的な使い方
if文に加えて、 elseや elifを使うことで、より複雑な分岐処理が可能になります。 elseは条件に一致しない場合の処理を、 elifは別の条件を追加で判定したい場合に使用します。
score = 65
if score >= 70:
print("合格です")
elif score >= 50:
print("追試です")
else:
print("不合格です")
このように、 if → elif → elseの順で条件を評価し、最初に一致したブロックだけが実行されます。条件が上から順に評価されることを意識することが、正しい処理分岐の第一歩です。
Pythonの条件分岐が「他の言語と違う」理由
if文の構文だけを見ると、Pythonも他の言語(C, Java, JavaScriptなど)と大差ないように思えます。
しかし、PythonにはPythonならではの設計思想や表現力の工夫が詰まっており、単なる「分岐構文」では終わらない魅力があります。
- インデントで構造を可視化する設計
Pythonではブロックを波カッコで囲むのではなく、インデントの深さでスコープを表現します。コードを読んだ瞬間に構造が見えるため、意図の把握が非常にスムーズです。 - 不等式の連結が自然に書ける
Pythonでは、 if 0 < x < 10: のように、数学的な不等式をそのまま記述できます。他言語でよく見る if (x > 0 && x < 10)よりも、可読性が高くミスを防ぎやすい構文です。 - 論理値を“変数”として活用できる
True や False を単なる判定結果ではなく、変数に代入して管理・再利用できるのもPythonらしさのひとつです。論理構造を明示的に分離する設計がしやすくなります。score = 85
is_passed = (score >= 80)
if is_passed:
print("合格") - None・空文字・0もFalseとして扱える
Pythonでは、 None・空文字 ""・数値の ・空リストなどがすべて暗黙的にFalseと判定されます。if not username:
print("ユーザー名が未入力です")
このように、Pythonの条件分岐はただの「文法」ではなく、コードの可読性と設計の柔軟さを支える思想そのものです。
単に動くだけでなく、「読みやすさ」や「設計意図の明示」を意識した分岐の使い方が求められるのが、Pythonの特徴と言えるでしょう。
if文の基本構文とネストの考え方
条件分岐の中心となるif文は、Pythonにおける制御構文の中でも最も使用頻度が高い要素です。
このセクションでは、if文の基本構文をおさらいしつつ、複数条件を処理するための「ネスト(入れ子)」の考え方を整理していきます。
ネスト構造を理解していないと、複雑な条件が絡む場面で予期しない動作を引き起こす可能性があります。正しく構文を組み立てる力は、実務でも大きな差になります。
if文の構文とブロックの書き方
Pythonのif文は、条件式のあとにコロン(:)をつけ、その下のインデントされたブロックを実行部分として扱います。
このブロック構造を理解することが、Pythonらしいコードを書くうえで重要な第一歩です。
value = 10
if value > 0:
print("正の数です")
print("条件を満たしました")
print("処理終了")
上記では、 print("正の数です")と print("条件を満たしました")はifブロックの中に含まれ、 print("処理終了")はその外になります。インデントにより、どこからどこまでがif文に属しているかを明確に分けている点が、Pythonの特徴です。
Pythonにおけるインデントのルールと制約
Pythonではインデントが構文の一部として扱われます。
他言語のように「見た目だけ整っていればOK」ではなく、正しくないインデントは即エラーとなります。
以下に、実務上必須となるインデントの制約とルールを表形式で整理します。
インデント方法 | 使用可否 | 補足 |
---|---|---|
半角スペース4つ | ◯(推奨) | PEP8(公式スタイルガイド)で推奨される標準 |
タブ(Tabキー) | △(使用は可能だが非推奨) | プロジェクト全体で統一されていれば可。ただし混在はNG |
半角スペース1〜3個 | × | Python構文として認識されず、 IndentationErrorになる |
スペースとタブの混在 | × | Python 3では明確にエラー。環境によっては意図しない挙動になる |
全角スペース | × | インデントとして認識されず、構文エラーの原因になる |
インデントが正しく設定されていないと、Pythonは
IndentationErrorとして処理を停止します。
また、見た目では区別がつきにくいため、エディタの自動インデント設定を確認しておくことが非常に重要です。
ネスト(入れ子)による分岐の実例
条件が複雑になると、if文の中にさらにif文を書く「ネスト構造」が登場します。
ネストは複数の条件を段階的に評価したい場合に有効ですが、構造が深くなりすぎると可読性が低下するため、慎重に使う必要があります。
age = 20
is_member = True
if age >= 18:
if is_member:
print("入場OK:会員です")
else:
print("入場OK:非会員です")
else:
print("18歳未満のため入場できません")
この例では、まず年齢条件で分岐し、次に会員かどうかで処理を分けています。
ネストを活用することで、複数の前提条件を段階的に確認するロジックを実現できます。
ネストしすぎによる可読性低下と対処法
ネストを深くしすぎると、どの条件がどこに対応しているのかが分かりづらくなります。
読み手の負担が増えるだけでなく、意図しない動作やバグを生む原因にもなります。
以下に、ネストが深くなりすぎた例を示します。
if condition1:
if condition2:
if condition3:
print("条件すべてクリア")
このような場合は、条件式を論理演算子(and)でまとめる、または関数として分離することで、コードの見通しを良くするのが有効です。
if condition1 and condition2 and condition3:
print("条件すべてクリア")
また、判断ロジックを切り出すことで、保守性と再利用性の高いコード設計にも繋がります。
elifとelseの役割と組み合わせ
Pythonでは、if文単体だけでなく
elifや
elseを組み合わせることで、より柔軟な条件分岐を実現できます。
elifは「他の条件が当てはまらなかった場合の追加条件」、
elseは「どれにも当てはまらなかった場合の最終処理」に使われます。
複数の条件を評価する場合、これらの使い方を理解していないと、意図しない処理が実行されたり、条件漏れが発生するリスクがあります。ここではそれぞれの構文の役割と正しい組み合わせ方について整理します。
elifを使うべき具体例
elifは、複数の条件を順に評価し、最初に一致した条件だけを処理させたいときに使います。
複数のif文を並べてしまうと、すべての条件を評価してしまうため、パフォーマンスや制御ロジックの面で問題になります。
score = 75
if score >= 90:
print("Sランク")
elif score >= 70:
print("Aランク")
elif score >= 50:
print("Bランク")
else:
print("Cランク")
このように、
if → elif → elif → elseの順で上から評価し、最初に一致した条件ブロックのみが実行されます。
これにより、無駄な条件判定を避け、明確なフローを保つことができます。
elseで処理の抜け漏れを防ぐ
すべての
ifや
elifに該当しなかった場合の処理を担当するのが
elseです。
「どの条件にも一致しないケース」を明示的に処理することで、想定外の入力や異常値に対する安全設計が可能になります。
mode = "admin"
if mode == "user":
print("ユーザーモードです")
elif mode == "guest":
print("ゲストモードです")
else:
print("モードが未定義です")
上記のように、想定されるすべての条件を if / elifでカバーし、 elseで「それ以外」を補完することで、条件漏れによるバグや予期せぬ挙動を防止できます。
条件の評価順と「最初に当てはまった分岐」の落とし穴
if → elif → else構文では、上から順に条件を評価し、最初にTrueになった条件だけが実行される点に注意が必要です。
それ以降の
elifや
elseブロックは無視されるため、評価順を誤ると意図しない処理が実行される可能性があります。
score = 95
if score >= 50:
print("Bランク")
elif score >= 90:
print("Sランク")
このコードでは、
scoreが95であるにもかかわらず、「Sランク」ではなく「Bランク」が出力されてしまいます。
これは、先に
score >= 50がTrueになって処理が確定してしまうからです。
条件が重複する可能性がある場合は、「より厳しい条件を先に書く」のが基本ルールです。これにより、より詳細な条件が優先され、意図通りの判定が可能になります。
複数条件の扱い(and, or, not)
プログラムにおいて、単一の条件だけでは制御しきれないケースは多々あります。
その際に重要になるのが、条件式の論理演算子である
and、
or、
notの使い方です。
Pythonでは、これらを組み合わせることで「かつ」「または」「ではない」といった複雑な分岐条件を明確に表現できます。
本セクションでは、基本構文から注意点までを具体例とともに整理します。
and・or・not の動作確認
まずは
and、
or、
notがそれぞれどのような動作をするのかを確認しましょう。
Pythonでは、これらの演算子は条件式同士をつなぐ役割を持ちます。
x = 10
y = 5
if x > 0 and y > 0:
print("両方とも正の数")
if x > 0 or y < 0:
print("どちらかが正の数または負の数")
if not x < 0:
print("xは負の数ではない")
andは両方の条件がTrueの場合のみ成立、
orはどちらか一方でもTrueなら成立、
notは条件を反転します。
この違いを理解することが、意図通りの分岐を記述する第一歩です。
優先順位と括弧の使い方
複数の論理演算子を組み合わせるとき、演算の優先順位に注意する必要があります。
Pythonでは
notが最優先で評価され、次に
and、最後に
orが処理されます。
ただし、明示的に優先順位を指定したい場合は、 ()(括弧)を使うのが最も安全で可読性も高まります。
x = 5
y = -2
z = 0
if x > 0 and (y > 0 or z > 0):
print("複合条件を満たす")
このように括弧を使えば、処理の意図が明確になり、後から読む人にも分かりやすい構成になります。
可読性の観点からも、括弧の活用は積極的に取り入れるべきテクニックです。
条件式の見落としがちなバグ例
論理演算子を使う際に発生しやすいミスは、「意図しない条件式の評価順序」や「範囲の漏れ」です。
特に
orの条件式では、全体を囲む括弧が不足してロジックが崩れるケースが目立ちます。
# 誤った例(すべてが実行されてしまう可能性あり)
if x == 1 or 2 or 3:
print("ヒット")
# 正しい書き方
if x == 1 or x == 2 or x == 3:
print("ヒット")
# よりスマートな方法(in演算子を使う)
if x in (1, 2, 3):
print("ヒット")
このように、論理演算子を使った条件分岐では、記述の明確さと意図の明示が重要になります。
見落としがちなバグを防ぐためにも、書き方には十分な注意が必要です。
よくある記述ミスと対策
if文は一見シンプルに見えますが、実際にコードを書くときには注意すべきポイントが多く存在します。
本セクションでは、初心者から中級者までがつまずきやすい代表的なミスと、それを回避するための対策を具体例付きで解説します。
構文エラー、ロジックの誤り、スコープの混乱など、放置すればバグや想定外の挙動を招くリスクがあるため、事前に把握しておくことが重要です。
条件式の書き間違い
条件式の記述ミスは、最もよくあるif文のトラブルです。
「つもり」で書いた条件が、実は全く異なる意味になっていることがあります。
x = 3
# ミス例
if x == 1 or 2:
print("一致")
# 正しい書き方
if x == 1 or x == 2:
print("一致")
前者の例では
x == 1 or 2が常にTrueと解釈され、意図しない条件で処理が実行されます。
Pythonでは論理演算子を使う際、**条件は毎回明示的に書く必要がある**点に注意してください。
インデントによる構文エラー
Pythonではインデントが構文そのものの一部として扱われます。
「スペース4つ」が推奨されており、タブとの混在やインデント不足は即エラーになります。
詳しいインデントの仕様や安全な書き方については、以下のセクションで詳しくまとめています。
👉 if文の構文とブロックの書き方 を参照
エディタ側の設定で、インデントを常に「スペース4つ」に自動変換するように設定しておくと安心です。
変数のスコープと参照エラー
if文ブロック内で定義した変数を、外部から参照しようとして
NameErrorが発生するケースもよくあります。
Pythonではif文内の変数はグローバルなスコープに属しますが、条件によっては定義されない可能性があるため、参照前に定義されているかを確認する必要があります。
if False:
message = "実行されない"
print(message) # NameErrorになる
この例では、
if Falseのためブロックが実行されず、
messageが未定義のままになり、エラーになります。
初期値を設定しておく、あるいはブロック外で定義することで、このようなエラーを回避できます。
message = ""
if condition:
message = "条件を満たしました"
print(message)
このように、変数のスコープは「使う場所」ではなく「定義されるかどうか」を基準に慎重に設計する必要があります。
実例:簡易ログイン判定を実装してみよう
条件分岐を理解するためには、実際のユースケースに沿ったコードを試すのが最も効果的です。
このセクションでは、簡易的なログイン認証プログラムを作成し、
if / elif / elseの活用例を実践的に確認していきます。
複数条件の組み合わせや、正常・異常のパターン分岐、保守しやすい条件構造の設計など、実務にも直結するスキルを習得することを目指します。
ユーザー名・パスワードの照合ロジック
ログイン判定の基本は、「入力されたユーザー名とパスワードが、登録された値と一致するかどうか」のチェックです。
この判定には
if文を2重に組み合わせるのが一般的です。
registered_user = "admin"
registered_pass = "pass123"
input_user = input("ユーザー名を入力してください: ")
input_pass = input("パスワードを入力してください: ")
if input_user == registered_user:
if input_pass == registered_pass:
print("ログイン成功")
else:
print("パスワードが違います")
else:
print("ユーザー名が存在しません")
このように、2つの条件を段階的に評価することで、ユーザーごとの認証ロジックを明確に記述できます。
正常系・異常系のパターンに分けた分岐
上記のコードを「正常系」「異常系」で整理すると、どのようなパターンがあるかを明確にできます。
特にエラー分岐は、条件の書き方次第で処理順や表示内容が大きく変わるため、事前に分けて設計することが重要です。
条件 | 出力 | 分類 |
---|---|---|
ユーザー名・パスワード両方正しい | ログイン成功 | 正常系 |
ユーザー名は正しいがパスワードが間違い | パスワードが違います | 異常系 |
ユーザー名が存在しない | ユーザー名が存在しません | 異常系 |
このように、実行フローをテーブル化しておくと、条件式に漏れや冗長さがないかを事前に確認することができます。
if文の設計力を磨くための考え方
実務では、ログイン判定のような分岐ロジックは複雑化しやすく、条件の整理や優先順位の明確化が求められます。
そのため、単にコードを書くだけでなく「分岐の設計図を作る」意識が重要です。
- 異常系は先に処理して早期リターン
→ 処理の読みやすさが格段に上がる - 条件式は関数に切り出す
→ 再利用性とテストのしやすさを確保 - 可読性>短さ
→ 三項演算や1行のネストは極力避ける
特にPythonでは、インデント構造がロジックの見た目に直結します。
その分、「読みやすい条件構造=品質の高いコード」という意識を持つことが、if文の設計力を高めるポイントです。
条件分岐の理解は設計力の第一歩
Pythonにおける
if / elif / elseは、単なる構文ではなく、プログラム全体の構造を左右する「判断の土台」です。
今回の内容では、基本的な構文からネスト・複数条件・よくあるミス・実践例までを通じて、条件分岐の設計と運用に必要な考え方を一通り整理しました。
- if文の構文ルールとインデントの仕組み
- elif・elseを使った複数条件の表現
- and, or, not による論理的な組み合わせ
- ミスを避けるための書き方と設計パターン
- 実務を意識したログイン判定の実装例
これらを押さえておくことで、「動くけど汚いコード」ではなく「意図が伝わる読みやすいコード」を書けるようになります。
条件分岐は、実務において最も使用頻度が高い構文のひとつです。
この段階でしっかりと理解し、設計力に繋げていきましょう。
次のセクションでは、繰り返し処理(for, while)について学んでいきます。条件分岐と組み合わせることで、より柔軟で実践的な処理が書けるようになります。
この記事を読んだら、次は「【Pythonの基礎知識】繰り返し処理の深掘り(for, while)」の使い方に進むのがおすすめです。