文系出身が Python で混同した if 文を複数使う場合と elif を使う場合の違い
はじめに
文系出身・未経験から新卒入社し、約 3 か月が経ちました。
現在、研修で Python の基礎を一通り学び終えました。
Python の条件分岐を勉強していると、似たような場面で if 文を 2 つ並べる場合と elif を使う場合があることに気づきます。
初心者のうちは「どちらでもいいのでは?」と思いがちです。
文系出身で、プログラミングの経験がなかった私は、複数の条件を書く場合、if 文の次は必ず elif が来ると思い込んでいました。
しかし実際にコードを書いてみると、この 2 つは条件の評価方法や実行される処理が異なることに気づきました。
この記事では、私が実際に混同していた「if 文を複数使う場合」と「elif を使う場合」の違いを、具体例とともにまとめます。
if 文を複数使う場合 | 各条件を独立して順にチェックする
if 文を複数並べると、それぞれの if 文は独立して評価されます。
前の if 文の条件が True か False かに関わらず、後続の if 文も順に評価されます。
if 文を複数使う場合の特徴
if 文を複数使う場合には、以下の特徴があります。
- 基本的には、複数の
if文はそれぞれ独立して上から順に評価される - 複数の
if文の条件がそれぞれTrueになり、複数のブロックが実行されることがある - 前の処理結果(変数の変化など)を次の条件で使うことができる
- 後続の
if文も、別の条件として評価される
if 文を複数並べた場合、それぞれの if 文は独立した文として扱われます。
そのため、前の if 文の条件が True か False かに関わらず、後続の if 文も上から順番に評価されます。
ただし、途中で return、break、continue、raise などにより制御フローが移ると、後続の if 文まで到達しない場合があります。
なお、return は関数内、break と continue はループ内で使う文です。
この性質は、前の処理結果(変数の変化など)を次の条件で使いたい場合に便利です。
例えば、変数の値が変わった後に、その新しい値で別の条件をチェックしたい場合は、if 文を複数使うと意図を表現しやすくなります。
if 文を複数使う場合の例
# 例 1:前の処理結果を次の条件で使う
score = 6
if score % 3 == 0:
score = score // 3 # score が 2 に変わる
if score == 2: # 変わった score をチェック
score = 0
print(score) # → 0
# 例 2:複数の独立した処理
age = 25
can_vote = False # 変数を事前に初期化する
if age >= 18:
print("成人です")
can_vote = True
if can_vote:
print("投票できます")
if 文を複数使う場合の動作確認
今回の検証環境は以下のとおりです。
- macOS
- Python 3.12.7
- VS Code
手順 1:VS Code でフォルダを開く
- VS Code を起動する
FileメニューからOpen Folder...を選択し、作業フォルダを開く
手順 2:新しいファイルを作成する
- エクスプローラーパネルで
New File...をクリックする - ファイル名を入力する:
test_if.py Enterキーを押してファイルを作成する
手順 3:コードを入力
以下のコードをエディタに入力します。

手順 4:ファイルを保存
Cmd + S を押してファイルを保存します。
手順 5:コードを実行
VS Code 右上の再生ボタン(▶)をクリックします。
実行結果は、ターミナルに以下のように出力されます。

処理フロー
score % 3 == 0がTrueなので、score = 6 // 3 = 2に変わる- 変わった
scoreの値(2)をチェック score == 2がTrueなので、score = 0に変わる0が表示される
elif | 最初に当てはまった 1 つだけを実行する
elif を使うと、それまでの if / elif 条件がすべて False の場合にのみ、次の条件を評価します。
それまでの条件のいずれかが True であれば、同じ if 文に属する後続の elif / else はスキップされます。
elif の特徴
elif には、以下の特徴があります。
- それまでの
if/elif条件がすべてFalseの場合にのみ評価される elifでは、上から順に条件が評価され、最初にTrueになったブロックだけが実行される- 条件式自体は複数
Trueになり得る - 条件が互いに排他的な場合、または上から順に優先順位を付けて最初に当てはまった 1 つだけを実行したい場合に
elifを使う
Python 公式ドキュメント - if 文 では、以下のように説明されています。
キーワード 'elif' は 'else if' を短くしたもので、過剰なインデントを避けるのに役立ちます。一連の if ... elif ... elif ... は、他の言語における switch 文や case 文の代用となります。
if / elif では、上から順に条件を評価し、最初に True になったブロックだけが実行されます。
ただし、条件式そのものは複数 True になり得ます。
複数の条件の中から最初に当てはまった 1 つだけを実行したい場合に elif を使うと、後続の条件を不要に評価せずに済みます。
例えば、成績判定のように「80 点以上なら合格、60 点以上なら再試験、40 点以上なら不合格、それ以外は再受験」のように、上から順に優先順位を付けて 1 つの結果を決めたい場合は、elif が適しています。
elif の例
# 例 1:成績判定(上から順に判定し、最初に当てはまった処理だけを実行する)
score = 75
if score >= 80:
print("合格")
elif score >= 60:
print("再試験")
elif score >= 40:
print("不合格")
else:
print("再受験")
# → 再試験
# 例 2:曜日判定
day = "Monday"
if day == "Saturday":
print("土曜日です")
elif day == "Sunday":
print("日曜日です")
else:
print("平日です")
# → 平日です
elif を使う場合の動作確認
手順 1:新しいファイルを作成
if 文の際と同様の手順で、新しいファイルを作成し、test_elif.py という名前で保存します。
手順 2:コードを入力
以下のコードをエディタに入力します。

手順 3:ファイルを保存
Cmd + S を押してファイルを保存します。
手順 4:コードを実行
VS Code 右上の再生ボタン(▶)をクリックします。
実行結果は、ターミナルに以下のように出力されます。

処理フロー
score >= 80がFalseなので、次の条件をチェックscore >= 60がTrueなので、「再試験」を表示- 同じ
if文に属する後続のelif条件は評価されず、elseブロックも実行されない
if 文と elif の違いを表で比較
| 項目 | 複数の if 文 |
if + elif |
|---|---|---|
| 各条件を独立してチェックする | ✅(後続の if 文まで到達する限り) |
❌(それまでの条件のいずれかが True なら後続をスキップ) |
複数の条件式が True になり得る |
✅ | ✅ |
| 実行されるブロックが複数になる | ✅ | ❌(最初に True になった 1 つだけ) |
前の if ブロックで変更した値を、次の条件判定に使える |
✅ | ❌(前のブロックが実行されると後続の elif は評価されない) |
| 処理の効率 | 後続の if 文まで到達する限り、それぞれの条件を評価する |
最初に True になった時点で、後続の elif / else は評価されない |
| 使う場面 | 処理結果を次の条件で使う・複数条件を同時に適用する | 最初に当てはまった 1 つだけを実行する・優先順位を付けて 1 つだけ選択する |
日常生活で例えると
if 文を複数使う場合(会計場面)
商品の合計金額を計算する
↓
「3,000 円以上?」→ YES なら「送料無料を適用」(合計金額が変わる)
↓
「会員カードを持っている?」→ YES なら「会員割引を適用」(さらに合計金額が変わる)
↓
「クーポンを持っている?」→ YES なら「クーポン割引を適用」
↓
最終金額を支払う
特徴: 前の処理で金額が変わると、その結果が次の条件チェックに影響する
elif を使う場合
成績評価の場面
↓
「90 点以上?」→ YES なら「表彰式に参加」(終了)
↓
NO なら「80 点以上?」→ YES なら「奨励金をもらう」(終了)
↓
NO なら「70 点以上?」→ YES なら「合格」(終了)
↓
NO なら「再試験」(終了)
特徴: 1 つの条件が True になったら、後の条件はチェックしない
if 文を複数使う場合は、「複数の独立した処理を順番に実行する」というイメージです。
一方、elif を使う場合は、「複数の選択肢の中から 1 つを選ぶ」というイメージです。
実践的な判断方法
コードを書く前に、以下のように判断します。
確認 1:前の処理結果を次の条件で使う?
# YES の場合 → if を複数使う
score = 6 # 例として score = 6 を使用
if score % 3 == 0:
score = score // 3
if score == 2:
score = 0
# NO の場合 → elif を使う(score を新たに定義)
score = 75 # 例として score = 75 を使用
if score >= 80:
print("合格")
elif score >= 60:
print("再試験")
確認 2:複数の処理を同時に実行したいか?
# YES の場合 → if を複数使う
if user_age >= 18:
can_vote = True
if user_age >= 65:
is_senior = True
# user_age が 65 以上の場合、can_vote と is_senior の両方が True になる
# NO の場合 → elif を使う
if user_age < 13:
category = "child"
elif user_age < 18:
category = "teen"
elif user_age < 65:
category = "adult"
else:
category = "senior"
# 条件式自体は複数 True になり得るが、実行されるブロックは 1 つだけ
確認 3:条件が互いに排他的(1 つだけ True)か?
# YES の場合 → elif を使う
if status == "active":
print("アクティブ")
elif status == "inactive":
print("非アクティブ")
elif status == "suspended":
print("停止中")
# NO の場合 → if を複数使う
if has_error:
log_error()
if has_warning:
log_warning()
# 両方同時に実行される可能性がある
実践的な使用例
例 1:商品の割引計算
# if 文を複数使う場合:複数の割引条件を適用
price = 15000
is_member = True
discount_rate = 0.0
if price >= 10000:
discount_rate += 0.1 # 10,000 円以上で 10% 割引
print("10,000 円以上割引を適用")
if price >= 20000:
discount_rate += 0.05 # さらに 20,000 円以上で 5% 割引
print("20,000 円以上割引を適用")
if is_member:
discount_rate += 0.05 # 会員なら 5% 割引
print("会員割引を適用")
final_price = price * (1 - discount_rate)
print(f"元の価格:{price:,} 円")
print(f"割引率:{discount_rate * 100:.1f}%")
print(f"最終価格:{final_price:,.0f} 円")
# → 10,000 円以上割引を適用
# → 会員割引を適用
# → 元の価格:15,000 円
# → 割引率:15.0%
# → 最終価格:12,750 円
例 2:ユーザー認証レベルの判定
# elif を使う場合:1 つのレベルだけを決定
login_count = 50
if login_count >= 100: # 50 >= 100 は False のためスキップ
level = "VIP"
benefits = "全機能無制限利用"
elif login_count >= 50: # 50 >= 50 は True のためここで確定
level = "プレミアム"
benefits = "広告なし、優先サポート"
elif login_count >= 10:
level = "シルバー"
benefits = "一部機能利用可能"
else:
level = "ブロンズ"
benefits = "基本機能のみ"
print(f"ユーザーレベル:{level}")
print(f"特典:{benefits}")
# → ユーザーレベル:プレミアム
# → 特典:広告なし、優先サポート
例 3:注文処理システム
# if 文を複数使う場合:複数の条件を独立してチェック
order_amount = 5000
is_member = True
has_coupon = True
# 配送料の計算
if order_amount < 3000:
shipping_fee = 500
print("配送料:500 円")
else:
shipping_fee = 0
print("配送料:無料(3,000 円以上)")
# 会員割引
discount = 0
if is_member:
discount = order_amount * 0.05
print(f"会員割引:{discount:,.0f} 円")
# クーポン割引
coupon_discount = 0
if has_coupon:
coupon_discount = 500
print("クーポン割引:500 円")
total = order_amount + shipping_fee - discount - coupon_discount
print(f"合計金額:{total:,.0f} 円")
# → 配送料:無料(3,000 円以上)
# → 会員割引:250 円
# → クーポン割引:500 円
# → 合計金額:4,250 円
まとめ
if 文と elif の使い分けは、以下のように考えるとわかりやすいです。
| 判断ポイント | 使う構文 |
|---|---|
| 複数の条件をすべて確認したい | 複数の if 文 |
| 前の処理結果を次の条件で使いたい | 複数の if 文 |
| 最初に当てはまった 1 つだけを実行したい | if / elif |
| 優先順位を付けて 1 つの結果を決めたい | if / elif |
最初はどちらも同じような条件分岐だと思っていましたが、実際には上記のような明確な違いがあります。
if 文を複数使う場合は「複数の独立した処理を順番に実行する」、elif を使う場合は「複数の選択肢の中から 1 つを選ぶ」というように判断します。
特に、商品の割引計算のように複数の割引条件を同時に適用したい場合は if 文を複数使い、成績評価のように、上から順に判定して 1 つの評価だけを決定したい場合は elif を使います。
このような使い分けを意識することで、より読みやすく意図の伝わるコードが書けるようになります。
今後も一つひとつ丁寧に理解を深めながら、学習を進めていきます。
参考資料
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイトをぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました。





