【Python入門シリーズ④】条件分岐の仕方 – プログラムに判断力を与える基本テクニック

python入門

こんにちは!前回の【Python入門シリーズ③】は演算子について学習しました。今回は条件分岐について詳しく解説していきます。条件分岐は「もし〜なら〜する」という判断をプログラムに実行させる重要な機能です。AIの判断処理の基盤にもなる概念なので、しっかりマスターしましょう!

このシリーズの目次

このシリーズでは、プログラミングの基礎から始めて、最終的にはAI・機械学習の初歩までを体験できるような構成になっています。

  • 第5回: 繰り返し処理でプログラムを自動化する
  • 第6回: 関数を作ってコードを整理整頓する
  • 第7回: 複数のデータを扱う「リスト」と文字列操作
  • 第8回: ライブラリでPythonの能力を拡張する
  • 第9回: ファイルの読み込みと書き込み
  • 第10回: Matplotlib入門!データをグラフで可視化する
  • 第11回: 画像データの仕組みとPillowでの基本操作
  • 第12回: 画像処理の基礎(フィルタリングと特徴抽出)
  • 第13回: 機械学習実践!AIによる画像分類に挑戦
  • 第14回: オープンデータの取得と前処理(データクレンジング)
  • 第15回: 実践データ分析!オープンデータから傾向を読み解く

条件分岐とは何か?

条件分岐とは、特定の条件によってプログラムの実行内容を変える仕組みです。日常生活でも「雨が降っていたら傘を持つ」「お腹が空いていたら食事をする」のような条件による判断を常に行っていますね。

プログラミングでも同様に:

  • ユーザーの入力値によって処理を変える
  • データの値によって異なる計算を実行する
  • エラーが発生した場合の対処を決める

このような状況に応じた判断を自動化できるのが条件分岐の力です。

if文の基本構文

Pythonではif文を使って条件分岐を実装します。

基本的なif文

まずは最もシンプルな条件分岐から見てみましょう。

age = 20

if age >= 18:
    print("成人です")
Python

このコードでは、変数ageに20を代入し、その値が18以上の場合にのみ「成人です」と表示します。条件が満たされない場合(age < 18)は何も実行されません。

構文のポイント:

  • ifの後に条件式を書く
  • 条件式の後に:(コロン)を付ける
  • 実行したい処理はインデント(字下げ)で書く

if-else文(二択の分岐)

条件が満たされない場合にも何かを実行したい時はelseを使います。

score = 75

if score >= 80:
    print("合格です!")
else:
    print("不合格です...")
Python

このコードは、得点が80点以上なら「合格です!」を、80点未満なら「不合格です…」を表示します。elseは「それ以外の場合」という意味で、条件がFalseの時に実行されるブロックです。

if-elif-else文(複数の条件)

3つ以上の選択肢がある場合はelif(else if の省略形)を使用します。

temperature = 25

if temperature >= 30:
    print("暑いです")
elif temperature >= 20:
    print("快適です")
elif temperature >= 10:
    print("涼しいです")
else:
    print("寒いです")
Python

この例では気温によって4段階の判定を行います。重要なのは上から順番に条件をチェックし、最初にTrueになった条件のブロックのみを実行することです。temperatureが25の場合、最初の条件(>= 30)はFalse、2番目の条件(>= 20)がTrueなので「快適です」が表示されます。

elifのポイント:

  • elifは「else if」の省略形
  • 上から順番に条件をチェック
  • 最初に True になった条件のブロックのみ実行

条件式で使える比較演算子

条件分岐では前回学習した比較演算子が大活躍します。すべての比較演算子を実際のコードで確認してみましょう。また、記事にまとめているので 演算子まとめから復習しよう。

x = 10
y = 20

# 等しい・等しくない
if x == y:
    print("xとyは等しい")
elif x != y:
    print("xとyは等しくない")

# 大小関係
if x < y:
    print("xはyより小さい")
elif x > y:
    print("xはyより大きい")
elif x <= y:
    print("xはy以下")
elif x >= y:
    print("xはy以上")
Python

この例ではx=10, y=20のため、「xとyは等しくない」と「xはyより小さい」が表示されます。比較演算子は数値だけでなく、文字列の辞書順比較などにも使用できます。

論理演算子で複雑な条件を作る

単純な条件だけでなく、複数の条件を組み合わせることで、より複雑な判断ができます。

and演算子(かつ)

複数の条件がすべて真の場合にのみ実行したい時に使用します。

age = 25
has_license = True

if age >= 18 and has_license:
    print("運転できます")
else:
    print("運転できません")
Python

このコードでは、年齢が18歳以上かつ免許を持っている場合のみ「運転できます」と表示されます。どちらか一つでも条件を満たしていなければ「運転できません」になります。

or演算子(または)

複数の条件のうち、どれか一つでも真の場合に実行したい時に使用します。

weather = "雨"
temperature = 5

if weather == "雨" or temperature < 10:
    print("外出には注意が必要です")
else:
    print("外出日和です")
Python

この例では、天気が「雨」または気温が10度未満の場合に注意メッセージを表示します。両方の条件を満たす必要はなく、どちらか一つが当てはまれば実行されます。

not演算子(〜でない)

条件の真偽を反転させたい時に使用します。

is_weekend = False

if not is_weekend:
    print("平日です")
else:
    print("週末です")
Python

not は条件を反転させるため、is_weekend False の場合、not is_weekend True になります。このコードは「平日です」と表示されます。

複合条件の例

複数の論理演算子を組み合わせて、より複雑な条件を作ることもできます。

age = 22
student = True
income = 150

if (age >= 18 and age <= 25) and (student or income < 200):
    print("学割が適用されます")
else:
    print("通常料金です")
Python

この例では、「18歳以上25歳以下」かつ「学生であるか年収200万円未満」の場合に学割が適用されます。括弧を使って条件の優先順位を明確にしているのがポイントです。

実践的な例:ユーザー認証システム

実際のアプリケーションでよく使われる認証システムを条件分岐で実装してみましょう。

# ユーザー入力を受け取る
username = input("ユーザー名を入力してください: ")
password = input("パスワードを入力してください: ")

# 認証チェック
if username == "admin" and password == "secret123":
    print("ログイン成功!管理者権限でアクセスします")
elif username == "user" and password == "pass456":
    print("ログイン成功!一般ユーザーとしてアクセスします")
else:
    print("認証失敗:ユーザー名またはパスワードが違います")
Python

このコードは、ユーザー名とパスワードの組み合わせによって異なる権限レベルでのログインを実現しています。実際のシステムでは、パスワードをそのままコードに書くことはありませんが、条件分岐の基本的な使い方を理解するには良い例です。

実践的な例:成績判定プログラム

より複雑な条件分岐を使って、成績判定システムを作成してみましょう。

# 科目の点数を入力
math = int(input("数学の点数: "))
english = int(input("英語の点数: "))
science = int(input("理科の点数: "))

# 平均点を計算
average = (math + english + science) / 3

# 成績判定
if average >= 90:
    grade = "A"
elif average >= 80:
    grade = "B"
elif average >= 70:
    grade = "C"
elif average >= 60:
    grade = "D"
else:
    grade = "F"

# 結果表示
print(f"平均点: {average:.1f}点")
print(f"成績: {grade}")

# 追加の判定
if grade in ["A", "B"]:
    print("優秀な成績です!")
elif grade == "C":
    print("まずまずの成績です")
else:
    print("もう少し頑張りましょう")
Python

このプログラムでは、以下の処理を順番に行っています:

  1. データ入力: input()で得られた文字列をint()で整数に変換
  2. 計算処理: 3科目の平均を計算
  3. 段階的判定: 平均点に応じて5段階の成績を判定
  4. 結果表示: f-string記法を使って小数点以下1桁まで表示
  5. 追加判定: in演算子を使ってリスト内の値との一致をチェック

特に注目すべきは、成績判定の部分で上から順番に条件をチェックしていることです。平均が85点の場合、最初の条件(>= 90)はFalse、2番目の条件(>= 80)がTrueとなり、成績は「B」になります。

条件分岐の応用テクニック

1. in演算子を使った所属チェック

リストや文字列に特定の値が含まれているかを簡潔にチェックできます。

fruits = ["りんご", "バナナ", "オレンジ"]
fruit = input("好きな果物は?: ")

if fruit in fruits:
    print(f"{fruit}は選択肢にあります!")
else:
    print("その果物は選択肢にありません")
Python

in演算子を使うことで、複数のor条件を書かずに済みます。例えばif fruit == "りんご" or fruit == "バナナ" or fruit == "オレンジ"と書く必要がありません。

2. 三項演算子(条件付き式)

簡単な条件分岐は1行で書くことができます。

age = 17
status = "成人" if age >= 18 else "未成年"
print(status)

# 通常のif文と同じ意味
# if age >= 18:
#     status = "成人"
# else:
#     status = "未成年"
Python

この書き方は「条件が真の場合の値 if 条件 else 条件が偽の場合の値」という構文です。短いコードで済むため、変数への代入時によく使われます。

3. 複数の値との比較

一つの変数を複数の値と比較する場合の効率的な書き方です。

day = "土曜日"

if day in ["土曜日","日曜日"]:
  print("週末です")
else:
  print("平日です")
Python

これはif day == "土曜日" or day == "日曜日"と同じ意味ですが、より読みやすく、値を追加・削除しやすい書き方です。

AIとの関連性

条件分岐は機械学習やAIシステムでも重要な役割を果たします。AIの判定結果に基づいて次の処理を決定する場面で頻繁に使用されます。

# 簡単な画像分類の判定例
confidence = 0.85 #信頼度
threshold = 0.8   #閾値

if confidence >= threshold:
  print("高い信頼度で分類できました")
  if confidence >= 0.9:
    print("非常に確実な判定です")
  else:
    print("確実性は中程度です")
else:
  print("判定の信頼度が低いです")
Python

このコードでは、AIモデルの予測確信度(confidence)に基づいて処理を分岐させています。確信度が閾値(threshold)を超えた場合のみ結果を採用し、さらに確信度のレベルに応じて異なるメッセージを表示します。

実際の機械学習プロジェクトでは、このような条件分岐を使って:

  • 予測確信度による結果のフィルタリング
  • 異なるモデルの選択
  • データの前処理方法の決定 などを自動化しています。

よくあるエラーとその対策

実際にコードを書いていると、以下のようなエラーに遭遇することがよくあります。エラーメッセージと対処法を覚えておきましょう。

IndentationError: expected an indented block

# ❌ このコードはエラーになります
score = 85
if score >= 80:
print("合格")  # インデントがない
Python

エラーメッセージ:

IndentationError: expected an indented block

原因と解決方法: Pythonではif文の後の処理ブロックは必ずインデント(字下げ)が必要です。スペース4個またはタブ1個でインデントしましょう。

# ✅ 正しい書き方
if score >= 80:
    print("合格")  # 正しいインデント(スペース4個またはタブ1個)
Python

SyntaxError: invalid syntax

# ❌ このコードはエラーになります
x = 10
if x = 10:  # 代入演算子を使っている
    print("10です")
Python

エラーメッセージ:

以下の問題に挑戦してみましょう!

SyntaxError: invalid syntax

原因と解決方法: 条件式では比較演算子==を使います。代入演算子=は使えません。=は値を変数に代入する時、==は値を比較する時に使用します。

# ✅ 正しい書き方
if x == 10:  # 比較演算子を使う
    print("10です")
Python

NameError: name ‘true’ is not defined

# ❌ このコードはエラーになります
is_student = true  # 小文字のtrue
if is_student:
    print("学生です")
Python

エラーメッセージ:

name 'true' is not defined

原因と解決方法: Pythonでは真偽値はTrueFalse(最初が大文字)です。JavaScriptやJavaなど他の言語では小文字の場合もありますが、Pythonでは必ず大文字で始めます。

# ✅ 正しい書き方
is_student = True  # 大文字のTrue
if is_student:
    print("学生です")
Python

TypeError: unsupported operand type(s)

# ❌ このコードはエラーになります
age = "20"  # 文字列
if age >= 18:
    print("成人です")
Python

エラーメッセージ:

TypeError: '>=' not supported between instances of 'str' and 'int'

原因と解決方法: 文字列と数値は直接比較できません。input()関数は常に文字列を返すので、数値として扱いたい場合は型変換が必要です。

# ✅ 正しい書き方
age = int("20")  # 文字列を整数に変換
if age >= 18:
    print("成人です")

# または最初から数値で定義
age = 20
if age >= 18:
    print("成人です")
Python

SyntaxError: invalid syntax(コロン忘れ)

# ❌ このコードはエラーになります
score = 85
if score >= 80  # コロンがない
    print("合格")
Python

エラーメッセージ:

SyntaxError: invalid syntax

原因と解決方法: if文の条件式の後には必ず:(コロン)を付けます。elifelseでも同様です。コロンはPythonに「ここから新しいブロックが始まる」ことを伝える重要な記号です。

# ✅ 正しい書き方
if score >= 80:  # コロンを忘れずに
    print("合格")
Python

練習問題

以下の問題に挑戦して、条件分岐の理解を深めましょう!

問題1: BMI判定プログラム

身長と体重を入力してBMIを計算し、以下の基準で判定するプログラムを作成してください:

  • 18.5未満:やせ
  • 18.5以上25未満:標準
  • 25以上30未満:肥満1度
  • 30以上:肥満2度以上

ヒント: BMI = 体重(kg) ÷ (身長(m) × 身長(m))

問題2: じゃんけんゲーム

コンピュータとじゃんけんをするプログラムを作成してください。ユーザーの入力とコンピュータのランダムな選択を比較して勝敗を判定しましょう。

ヒント: import randomしてrandom.choice(["グー", "チョキ", "パー"])でランダム選択

問題3: パスワード強度チェック

パスワードの強度を以下の条件で判定するプログラムを作成してください:

  • 8文字以上
  • 大文字を含む
  • 小文字を含む
  • 数字を含む

ヒント: len()islower()isupper()isdigit()メソッドを活用

まとめ

今回は条件分岐について学習しました。重要なポイントをおさらいします:

  • if文:条件に応じてプログラムの動作を分岐
  • 比較演算子:値の大小や等価性をチェック
  • 論理演算子:複数の条件を組み合わせ
  • インデント:Pythonの構文で実行ブロックを示す重要な要素

条件分岐をマスターすると、プログラムに「判断力」を持たせることができます。次回は繰り返し処理について学習し、さらにプログラムを自動化していきましょう!


次回予告:第5回では「繰り返し処理でプログラムを自動化する」として、for文やwhile文を使った効率的なプログラミング手法を学習します。お楽しみに!

関連記事

コメント

タイトルとURLをコピーしました