Pythonの条件分岐を基礎から応用まで初心者向けに分かりやすく解説

この記事のポイント

Python条件分岐について、基礎から実践まで幅広く学習できるよう構成しています。

  • if文の基本構文と複数条件での分岐処理
  • 論理演算子andやorを活用した複合条件の判定方法
  • 三項演算子やmatch-case文など他の分岐手法の使い方

各セクションで具体的なコード例を示しているため、実際に手を動かしながら理解を深められます。

目次

Pythonの条件分岐の基礎

条件分岐は、プログラムが状況に応じて異なる処理を選択し、実行するための仕組みです。入力された値や変数の状態によって、プログラムの実行する処理を変えることができるこの機能により、プログラムがより柔軟で実用的になります。

以下では、条件分岐を理解するうえで必要な基礎概念について説明します。

【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング

条件分岐の役割

条件分岐は、プログラムが単調な処理の繰り返しから脱却し、状況に応じた判断を下せるようにする仕組みです。例えば、年齢によって異なるメッセージを表示したり、天気によって服装を提案したりといった処理が可能です。プログラムは条件式を評価し、その結果がTrueかFalseかという論理値に基づいて、次に実行する処理を決定します。

以下は年齢による判定の例です。

age = 18 if age >= 18: print("ネコは大人です") else: print("ネコは未成年です")

出力結果

ネコは大人です

Pythonの論理値(True/False)と比較演算

Pythonでは条件の判定にTrue(真)とFalse(偽)という論理値を使用します。主な比較演算子には等しい(==)、より大きい(>)、以上(>=)、未満(<)、以下(<=)、等しくない(!=)があり、これらを使って値同士を比較すると、その結果として論理値が返されます。

dog_age = 5 cat_age = 3 print(dog_age > cat_age) print(dog_age == cat_age) print(cat_age <= 3)

出力結果

True
False
True

インデントによるブロック構造の理解

Pythonでは他のプログラミング言語と異なり波括弧ではなく、インデント(字下げ)によってコードのブロック構造を表現します。if文の後に実行したい処理は、必ず同じレベルのインデントで記述する必要があります。通常はスペース4つでインデントしますが、正しいインデントでないとエラーになるため注意が必要です。

rabbit_speed = 30 if rabbit_speed > 25: print("ウサギは速く走っています") print("追いつくのは困難です") else: print("ウサギは走るのが遅いです") print("これは条件に関係なく実行されます")

出力結果

ウサギは速く走っています
追いつくのは困難です
これは条件に関係なく実行されます

if文による基本的な条件分岐

if文は条件分岐の基本となる構文で、指定した条件がTrueの場合にのみ特定の処理を実行します。シンプルな条件判定から複数条件の複雑な分岐まで、さまざまな場面で活用されます。ここでは、if文の基本的な書き方から応用的な使い方まで段階的に解説していきます。

なお、以下の記事でもif文について詳しく解説しています。あわせてご覧ください。

【関連】Pythonのif文の使い方は?基本構文から応用まで初心者向けに徹底解説

if文の基本構文と単純条件の書き方

if文の基本的な書き方は、「if 条件式:」の後にインデントを入れて実行したい処理を記述します。条件式がTrueと評価された場合のみ、インデントされた部分が実行されます。コロン(:)の記述を忘れないよう注意してください。まずは、最も基本的な形での条件判定を身につけましょう。

elephant_weight = 5000 if elephant_weight > 3000: print("ゾウはとても重いです") print("特別な檻が必要です")

出力結果

ゾウはとても重いです
特別な檻が必要です

elifとelseによる複数条件の分岐

複数の条件を順番に検証したい場合はelifを使用し、どの条件にも該当しない場合の処理にはelseを使用します。Pythonはコードを上から順番に条件を評価し、最初にTrueになった条件の処理のみを実行し、すべての条件がFalseの場合はelse部分が実行されます。

lion_age = 8 if lion_age < 3: print("ライオンは子どもです") elif lion_age < 10: print("ライオンは大人です") else: print("ライオンは高齢です")

出力結果

ライオンは大人です

ネスト構造による条件分岐の入れ子処理

if文の中にさらにif文を記述することをネスト構造と呼び、より複雑な条件判定が可能になります。この構造では外側の条件がTrueの場合のみ内側の条件が評価されるため、段階的な判定に適しています。ただし、インデントが深く複雑になるため、可読性に注意して記述しましょう。

def check_penguin_status(location, season): if location == "南極": if season == "夏": print(f"[{location}の{season}] ペンギンの繁殖期です。") elif season == "冬": print(f"[{location}の{season}] ペンギンは寒さに耐え、厳しい冬を乗り越えています。") else: print(f"[{location}の{season}] ペンギンは餌を探しています。") elif location == "動物園": print(f"[{location}の{season}] ペンギンは快適な環境で過ごしています。") else: print(f"[{location}] この場所のペンギンの状態は分かりません。") check_penguin_status("南極", "夏") check_penguin_status("動物園", "冬")

出力結果

[南極の夏] ペンギンの繁殖期です。
[動物園の冬] ペンギンは快適な環境で過ごしています。

何もしない処理(pass)の使いどころ

条件分岐の構造は作りたいが、まだ具体的な処理内容が決まっていない場合にpass文を使用します。passは何も実行しない文で、プログラムの骨組みを先に作成する際に便利です。

あとで実装予定の部分にpass文を置いておけば、シンタックスエラー(SyntaxError:構文上の間違い)を避けながら開発を進められます。

bear_type = "ヒグマ" if bear_type == "パンダ": print("クマは竹を食べます") elif bear_type == "ヒグマ": pass # 後で実装予定 else: print("一般的なクマの行動です")

出力結果

(※何も表示されません)

複数条件の判定と論理演算子の活用

実際のプログラムでは、単一の条件だけでなく複数の条件を組み合わせて判定することが多くあります。論理演算子を使用することで、このような複雑な条件式を効率的に記述できます。ここでは、and、or、notといった論理演算子の使い方と、複雑な条件式を整理するテクニックについて解説します。

なお、演算子について詳しく知りたい方は以下の記事をご覧ください。

【関連】Pythonの演算子とは?基本から応用まで初心者向けに解説

andによる複合条件の厳密判定

and演算子は複数の条件がすべてTrue(真)の場合のみ全体をTrueと判定し、一つでもFalseの条件があれば、全体の結果はFalseになります。例えば年齢と身長の両方を満たす場合など、複数要素に対して、条件がすべて満たされているかを確認したい場面で活用します。

monkey_age = 5 monkey_height = 80 if monkey_age >= 3 and monkey_height >= 70: print("サルは大型の部類です") print("特別なエリアで飼育します")

出力結果

サルは大型の部類です
特別なエリアで飼育します

orによる条件のいずれか成立判定

or演算子は複数の条件のうち、どれか一つでもTrueであれば全体をTrueと判定し、すべての条件がFalseの場合のみ、全体の結果がFalseになります。複数の動物種別や時間帯など、いくつかの選択肢のどれかに当てはまることを確認したい場面で便利です。

tiger_habitat = "ジャングル" if tiger_habitat == "森林" or tiger_habitat == "ジャングル": print("トラは自然環境にいます") print("狩りが得意です")

出力結果

トラは自然環境にいます
狩りが得意です

notによる条件反転の活用

not演算子は条件の結果を反転させます。Trueの場合はFalse、Falseの場合はTrueになります。特定の条件に当てはまらない場合を判定したいときに使用します。否定的な条件を直接的に表現するよりも、肯定的な条件をnotで反転させる方がコードの意図が明確になり、理解しやすい場合があります。

horse_training = False if not horse_training: print("ウマはまだ訓練されていません") print("基礎的な世話から始めます")

出力結果

ウマはまだ訓練されていません
基礎的な世話から始めます

複雑な条件式を整理して書くコツ

複数の論理演算子を組み合わせる場合、括弧を使って優先順位を明確にし、条件式を複数行に分けて可読性を向上させることが大切です。長い条件式は変数に代入して名前を付けることで、コードの意図がわかりやすくなります。適切に整理することで、メンテナンスしやすいプログラムになります。

sheep_age = 4 sheep_health = "良好" sheep_weight = 45 is_adult = sheep_age >= 2 is_healthy = sheep_health == "良好" is_appropriate_weight = 30 <= sheep_weight <= 60 if is_adult and is_healthy and is_appropriate_weight: print("ヒツジは飼育に適しています") elif (is_adult or is_appropriate_weight) and is_healthy: print("健康は良好ですが、飼育は少し難しいです") else: print("飼育には適していません")

出力結果

ヒツジは飼育に適しています

if以外の条件分岐構文と代替手段

if文以外にも、Pythonには条件分岐を行うためのさまざまな手法があります。状況に応じて最適な方法を選択することで、より読みやすく効率的なコードを書けます。

ここでは、三項演算子、match-case文、そして辞書を使った分岐という手法について、それぞれの特徴と適用場面を紹介します。

三項演算子による簡潔な条件処理

三項演算子は1行で条件分岐を記述できる方法で、「値1 if 条件 else 値2」の形式で書きます。条件がTrueの場合は値1を、Falseの場合は値2を返します。これはシンプルな条件での値の切り替えに適しており、変数への代入や関数の引数として直接使用できるため、コードを簡潔にまとめられます。

fox_age = 3 fox_status = "大人" if fox_age >= 2 else "子ども" print(f"キツネは{fox_status}です")

出力結果

キツネは大人です

match-case文によるパターン分岐

Python 3.10で導入されたmatch-case文は、値のパターンマッチングによる分岐処理を行います。従来のif-elif文よりも、複数の特定の値や、構造化されたデータに対する判定と分岐処理をより見やすく記述できるのが特徴です。caseの最後には「case _:」と記述することで、どのパターンにも当てはまらないデフォルトケースを設定できます。

animal_type = "イヌ" match animal_type: case "イヌ": print("ワンワンと鳴きます") case "ネコ": print("ニャーと鳴きます") case _: print("不明な動物です")

出力結果

ワンワンと鳴きます

辞書を使った条件分岐の代替パターン

辞書のキーと値を使って条件分岐の代わりとする手法があります。これは、条件に対応する値や実行したい関数を辞書に格納し、get()メソッドで取得することで分岐処理を実現できます。多数の選択肢がある場合、if-elif文よりも効率的で保守(メンテナンス)しやすくなります。データとロジックを分離できるため、設定の変更も容易です。

def cat_sound(): return "ニャー" def dog_sound(): return "ワンワン" # 辞書の中に関数を格納 animal_sounds = { "ネコ": cat_sound, "イヌ": dog_sound } pet = "ネコ" # petの種類がネコのものをgetで呼び出している sound_func = animal_sounds.get(pet, lambda: "不明") print(f"{pet}は{sound_func()}と鳴きます")

出力結果

ネコはニャーと鳴きます

条件分岐と他のPython機能との連携

条件分岐は単独で使用するだけでなく、繰り返し処理や例外処理、関数などの他のPython機能と組み合わせることで、より実用的なプログラムを作成できます。これらの連携により、複雑な処理を整理された形で実装できるようになります。ここでは、実際の開発でよく使われる組み合わせパターンを紹介します。

for・whileと条件分岐の組み合わせ

繰り返し処理(forwhile)の中で条件分岐を使用することで、要素ごとに異なる処理を実行したり、特定の条件で繰り返しを制御したりできます。for文ではリストなどの各要素を判定して処理を分岐させ、while文では条件を満たすまで繰り返しを続けます。breakやcontinueと組み合わせることで、より柔軟な制御が可能になります。

animals = ["イヌ", "ネコ", "ウサギ", "ハムスター"] for animal in animals: if len(animal) <= 2: print(f"{animal}は名前が短いです") else: print(f"{animal}は名前が長いです")

出力結果

イヌは名前が短いです
ネコは名前が短いです
ウサギは名前が長いです
ハムスターは名前が長いです

例外処理(try-except)との併用

条件分岐と例外処理は異なる役割を持ちます。条件分岐は予想できる状況での処理の切り替えに使い、例外処理は予期しないエラーへの対応に使います。この2つを組み合わせることで、通常の処理フローとエラー処理を適切に分離できます。エラーが発生する可能性のある処理では、事前の条件確認(例:ファイルが存在するか)と例外処理(例:ファイルが開けない場合)の両方を活用します。

zoo_animals = {"ライオン": 3, "トラ": 2} animal_name = "パンダ" try: count = zoo_animals[animal_name] if count > 0: print(f"{animal_name}は{count}頭います") else: print(f"{animal_name}は現在いません") except KeyError: print(f"{animal_name}は飼育していません")

出力結果

パンダは飼育していません

関数化と条件分岐の整理術

複雑な条件分岐のロジックを関数に分割することで、コードの可読性と再利用性が飛躍的に向上します。具体的には、条件判定のロジックを関数として独立させることで、メイン処理がすっきりし、テストも容易になります。関数名によって処理の意図を明確に表現できるため、プログラム全体が理解しやすくなります。

def is_large_animal(weight): return weight > 100 def get_care_level(animal_weight): if is_large_animal(animal_weight): return "専門的なケアが必要" else: return "一般的なケアで十分" elephant_weight = 3000 care_instruction = get_care_level(elephant_weight) print(f"ゾウ: {care_instruction}")

出力結果

ゾウ: 専門的なケアが必要

よくある質問(Q&A)

Q: if文でイコールが2つ(==)なのはなぜ?

A: 代入の=と区別するためです。=は値を変数に格納し、==は値が等しいかを判定します。この2つを混同すると、エラーや意図しない動作の原因となるため注意が必要です。

animal = "ネコ" # 代入 if animal == "ネコ": # 比較 print("正しい比較です")

出力結果

正しい比較です

Q: elif をたくさん書くのと辞書はどちらが良い?

A: 状況によって使い分けます。選択肢が多く、それに対する処理が単純な場合は、辞書の方が効率的で処理も高速です。一方、複雑な条件や処理がある場合はelifが適しています。

# 辞書の例 actions = {"イヌ": "散歩", "ネコ": "昼寝"} action = actions.get("イヌ", "不明") print(action)

出力結果

散歩

Q:notとFalseの使い分けは?

A: notは条件を反転させる演算子、Falseは単なる論理値です。「not 条件」で条件の否定を、「== False」で明示的にFalseとの比較を行います。

is_sleeping = False if not is_sleeping: # より自然 print("ウサギは起きています")

出力結果

ウサギは起きています

Q:三項演算子が読みにくい場合は?

A: 条件が複雑になり、一目で理解できないと感じる場合は、迷わず通常のif文を使いましょう。三項演算子は簡潔さが利点ですが、可読性はプログラミングで最も優先すべき要素の一つです。

# 複雑な場合は通常のif文 animal_age = 3 animal_health = "良好" if animal_age >= 2 and animal_health == "良好": status = "飼育可能" else: status = "要検査" print(status)

出力結果

飼育可能

まとめ

Python条件分岐について、基礎から実践的な応用まで幅広く解説してきました。条件分岐はプログラムに判断能力を与える機能で、さまざまな場面での活用が可能です。

ポイント

  • if文の基本構文とインデントルールが理解できる
  • elif・elseによる複数条件の段階的判定が行える
  • 論理演算子and・or・notを使った複合条件の作成ができる
  • 三項演算子やmatch-case文による効率的な分岐処理ができる
  • 関数化による複雑な条件分岐の整理と再利用性を向上させられる

条件分岐を適切に使いこなすことで、柔軟で実用的なプログラムを作成できるようになります。基本的な構文から始めて、徐々に複雑なパターンに挑戦していくことが上達の近道です。実際にコードを書いて動作を確認しながら、理解を深めていってください。

プログラミングを学ぶなら、動画と豊富な練習問題で効率的に学習できるpaizaラーニングがおすすめです。Pythonの講座も公開していますのでぜひご覧ください。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. ナレッジ
  3. Pythonのナレッジ記事一覧
  4. Pythonの条件分岐を基礎から応用まで初心者向けに分かりやすく解説