【2025年最新】Python if文の使い方完全ガイド:基礎から上級テクニックまで徹底解説
Pythonプログラミングにおいて、if文は最も基本的かつ重要な制御構文の一つです。初心者から上級者まで、誰もが日常的に使用するif文について、基礎から応用まで網羅的に解説します。
この記事を読むことで、Python if文の全てを理解し、より効率的で読みやすいコードが書けるようになります。
目次
- 1 Python if文の基礎知識 {#基礎知識}
- 2 基本的なif文の書き方 {#基本的な書き方}
- 3 比較演算子の使い方 {#比較演算子}
- 4 論理演算子の活用 {#論理演算子}
- 5 elif文とelse文 {#elif-else}
- 6 ネストしたif文 {#ネスト}
- 7 三項演算子(条件式) {#三項演算子}
- 8 高度なテクニック {#高度なテクニック}
- 9 実践的な応用例 {#実践例}
- 10 よくある間違いと対処法 {#よくある間違い}
- 11 パフォーマンスの最適化
- 12 まとめ
- 13 ■らくらくPython塾 – 読むだけでマスター
- 14 ■プロンプトだけでオリジナルアプリを開発・公開してみた!!
- 15 ■AI時代の第一歩!「AI駆動開発コース」はじめました!
- 16 ■テックジム東京本校
- 17 <短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
- 18 <月1開催>放送作家による映像ディレクター養成講座
- 19 <オンライン無料>理系出身者向けのPython爆速講座
Python if文の基礎知識 {#基礎知識}
if文は条件分岐を行うための制御構文で、指定した条件が真(True)の場合にのみ、特定のコードブロックを実行します。
if文の基本構文
if 条件式:
実行したい処理
重要なポイント:
- 条件式の後には必ずコロン(:)を付ける
- 実行したい処理は4つの半角スペース(またはタブ)でインデントする
- Pythonではインデントが文法的に重要な意味を持つ
基本的なif文の書き方 {#基本的な書き方}
最もシンプルなif文
age = 20
if age >= 18:
print("成人です")
変数の値による条件分岐
score = 85
if score >= 80:
print("優秀な成績です")
if score < 60:
print("もっと頑張りましょう")
文字列の条件判定
name = "田中"
if name == "田中":
print("こんにちは、田中さん")
# 文字列の包含判定
message = "Pythonプログラミング"
if "Python" in message:
print("Pythonに関する内容です")
比較演算子の使い方 {#比較演算子}
Pythonで使用できる比較演算子一覧:
| 演算子 | 意味 | 例 |
|---|---|---|
| == | 等しい | a == b |
| != | 等しくない | a != b |
| < | より小さい | a < b |
| <= | 以下 | a <= b |
| > | より大きい | a > b |
| >= | 以上 | a >= b |
| is | 同一オブジェクト | a is b |
| is not | 異なるオブジェクト | a is not b |
| in | 包含関係 | a in b |
| not in | 非包含関係 | a not in b |
実用例
# 数値の比較
temperature = 25
if temperature > 30:
print("暑い日です")
elif temperature < 10:
print("寒い日です")
else:
print("過ごしやすい気温です")
# リストの包含判定
fruits = ["りんご", "バナナ", "オレンジ"]
if "りんご" in fruits:
print("りんごがあります")
# None値の判定
data = None
if data is not None:
print("データが存在します")
else:
print("データがありません")
論理演算子の活用 {#論理演算子}
複数の条件を組み合わせる際に使用する論理演算子:
and演算子(論理積)
すべての条件が真の場合に真を返す
age = 25
income = 300
if age >= 20 and income >= 200:
print("ローンの審査に通りました")
# より複雑な条件
username = "admin"
password = "secret123"
is_active = True
if username == "admin" and password == "secret123" and is_active:
print("管理者としてログインしました")
or演算子(論理和)
いずれかの条件が真の場合に真を返す
weather = "雨"
if weather == "雨" or weather == "雪":
print("傘を持って行きましょう")
# 複数の値をチェック
grade = "A"
if grade == "A" or grade == "B" or grade == "C":
print("合格です")
# より効率的な書き方
if grade in ["A", "B", "C"]:
print("合格です")
not演算子(論理否定)
条件の真偽を反転させる
is_weekend = False
if not is_weekend:
print("平日です")
# リストが空でない場合
items = [1, 2, 3]
if not len(items) == 0: # または if items:
print("アイテムがあります")
elif文とelse文 {#elif-else}
elif文による多段階条件分岐
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"あなたの成績は{grade}です")
実践的なelif文の使用例
def get_season(month):
if month in [12, 1, 2]:
return "冬"
elif month in [3, 4, 5]:
return "春"
elif month in [6, 7, 8]:
return "夏"
elif month in [9, 10, 11]:
return "秋"
else:
return "無効な月です"
# 使用例
current_month = 7
print(f"{current_month}月は{get_season(current_month)}です")
ネストしたif文 {#ネスト}
if文の中にさらにif文を書くことをネスト(入れ子)といいます。
基本的なネスト構造
age = 25
has_license = True
has_car = False
if age >= 18:
print("運転可能な年齢です")
if has_license:
print("運転免許を持っています")
if has_car:
print("車で移動できます")
else:
print("車を購入する必要があります")
else:
print("運転免許を取得してください")
else:
print("運転できません")
ネストを避けるリファクタリング
ネストが深くなりすぎると読みにくくなるため、early returnや論理演算子を使って改善できます。
# 改善前(ネストが深い)
def check_access(user_role, is_logged_in, has_permission):
if is_logged_in:
if user_role == "admin":
if has_permission:
return "アクセス許可"
else:
return "権限不足"
else:
return "管理者権限が必要です"
else:
return "ログインしてください"
# 改善後(early returnを使用)
def check_access_improved(user_role, is_logged_in, has_permission):
if not is_logged_in:
return "ログインしてください"
if user_role != "admin":
return "管理者権限が必要です"
if not has_permission:
return "権限不足"
return "アクセス許可"
三項演算子(条件式) {#三項演算子}
Pythonの三項演算子は、簡潔に条件分岐を記述できる構文です。
基本構文
# 基本形
結果 = 真の場合の値 if 条件 else 偽の場合の値
# 例
age = 20
status = "成人" if age >= 18 else "未成年"
print(status) # 出力: 成人
実用的な三項演算子の例
# 最大値を求める
a, b = 10, 20
max_value = a if a > b else b
# 空文字列のデフォルト値設定
name = ""
display_name = name if name else "名無し"
# リストの要素数チェック
items = [1, 2, 3]
message = f"{len(items)}個のアイテムがあります" if items else "アイテムがありません"
# 複数の三項演算子を連鎖
score = 85
grade = "A" if score >= 90 else "B" if score >= 80 else "C" if score >= 70 else "F"
高度なテクニック {#高度なテクニック}
Truthyな値とFalsyな値
Pythonでは、以下の値が偽(Falsy)として扱われます:
# Falsyな値の例
falsy_values = [
False, # ブール値のFalse
0, # 数値の0
0.0, # 浮動小数点の0.0
"", # 空文字列
[], # 空リスト
{}, # 空辞書
set(), # 空セット
None # None値
]
for value in falsy_values:
if not value:
print(f"{repr(value)} は Falsy です")
all()とany()関数の活用
# all(): すべての要素が真の場合に真
scores = [80, 90, 85, 92]
if all(score >= 60 for score in scores):
print("全科目で合格点を取りました")
# any(): いずれかの要素が真の場合に真
temperatures = [35, 28, 30, 33]
if any(temp > 32 for temp in temperatures):
print("真夏日がありました")
# 複雑な条件判定
users = [
{"name": "田中", "age": 25, "active": True},
{"name": "佐藤", "age": 30, "active": False},
{"name": "鈴木", "age": 22, "active": True}
]
# アクティブな成人ユーザーが存在するかチェック
if any(user["age"] >= 20 and user["active"] for user in users):
print("アクティブな成人ユーザーがいます")
match文(Python 3.10以降)
Python 3.10で導入されたmatch文は、複雑な条件分岐をより読みやすく記述できます。
def handle_http_status(status_code):
match status_code:
case 200:
return "成功"
case 404:
return "ページが見つかりません"
case 500:
return "サーバーエラー"
case code if 400 <= code < 500:
return "クライアントエラー"
case _:
return "不明なステータスコード"
# 使用例
print(handle_http_status(200)) # 成功
print(handle_http_status(403)) # クライアントエラー
実践的な応用例 {#実践例}
ユーザー入力の検証
def validate_user_input():
while True:
age_input = input("年齢を入力してください: ")
# 数値かどうかチェック
if not age_input.isdigit():
print("数値を入力してください")
continue
age = int(age_input)
# 年齢の範囲チェック
if age < 0 or age > 150:
print("有効な年齢を入力してください(0-150)")
continue
# カテゴリー判定
if age < 13:
category = "子供"
elif age < 20:
category = "未成年"
elif age < 65:
category = "成人"
else:
category = "高齢者"
print(f"あなたは{category}に分類されます")
break
ファイル処理での条件分岐
import os
def process_file(filename):
# ファイルの存在チェック
if not os.path.exists(filename):
print(f"ファイル '{filename}' が見つかりません")
return
# ファイルサイズチェック
file_size = os.path.getsize(filename)
if file_size == 0:
print("ファイルが空です")
return
elif file_size > 1024 * 1024: # 1MB
print("ファイルが大きすぎます")
return
# 拡張子による処理分岐
_, ext = os.path.splitext(filename)
if ext.lower() in ['.txt', '.md']:
print("テキストファイルを処理中...")
elif ext.lower() in ['.jpg', '.png', '.gif']:
print("画像ファイルを処理中...")
else:
print("サポートされていないファイル形式です")
APIレスポンスの処理
def handle_api_response(response_data):
# レスポンスの存在チェック
if not response_data:
return {"error": "レスポンスが空です"}
# ステータスコードチェック
status_code = response_data.get("status_code")
if not status_code:
return {"error": "ステータスコードがありません"}
# 成功レスポンスの処理
if 200 <= status_code < 300:
data = response_data.get("data")
if not data:
return {"warning": "データが空です"}
return {"success": True, "data": data}
# エラーレスポンスの処理
elif 400 <= status_code < 500:
error_message = response_data.get("message", "クライアントエラー")
return {"error": f"リクエストエラー: {error_message}"}
elif 500 <= status_code < 600:
return {"error": "サーバーエラーが発生しました"}
else:
return {"error": f"不明なステータスコード: {status_code}"}
よくある間違いと対処法 {#よくある間違い}
間違い1: 代入演算子と比較演算子の混同
# 間違い
x = 5
if x = 5: # SyntaxError
print("xは5です")
# 正しい
x = 5
if x == 5:
print("xは5です")
間違い2: 浮動小数点数の比較
# 問題のあるコード
a = 0.1 + 0.2
if a == 0.3:
print("等しい") # 実行されない場合がある
# 改善されたコード
import math
a = 0.1 + 0.2
if math.isclose(a, 0.3):
print("等しい")
間違い3: ミュータブルオブジェクトのデフォルト引数
# 問題のあるコード
def add_item(item, items=[]):
items.append(item)
return items
# 改善されたコード
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
間違い4: チェーン比較の誤解
# 誤解しやすい例
x = 5
# False < 5 < True は True になる(Falseは0、Trueは1として扱われる)
if False < x < True:
print("これは実行される") # 予期しない動作
# 明確な比較
if 0 < x < 10:
print("xは1から9の間です")
パフォーマンスの最適化
条件の順序による最適化
# 効率的でない順序
def check_complex_condition(user):
if expensive_database_query(user) and user.is_active:
return True
return False
# 効率的な順序(軽い条件を先に)
def check_complex_condition_optimized(user):
if user.is_active and expensive_database_query(user):
return True
return False
辞書を使った条件分岐の最適化
# if-elif-elseチェーンが長い場合
def get_discount_rate_slow(membership_type):
if membership_type == "bronze":
return 0.05
elif membership_type == "silver":
return 0.10
elif membership_type == "gold":
return 0.15
elif membership_type == "platinum":
return 0.20
else:
return 0.0
# 辞書を使った高速化
def get_discount_rate_fast(membership_type):
discount_rates = {
"bronze": 0.05,
"silver": 0.10,
"gold": 0.15,
"platinum": 0.20
}
return discount_rates.get(membership_type, 0.0)
まとめ
Python if文は、プログラムの流れを制御する重要な構文です。基本的な使い方から高度なテクニックまで理解することで、より効率的で読みやすいコードが書けるようになります。
重要なポイント:
- 基本構文: 条件式の後にコロン、適切なインデントを使用
- 比較演算子: ==, !=, <, <=, >, >=, is, in などを適切に使い分け
- 論理演算子: and, or, not を組み合わせて複雑な条件を表現
- 可読性: ネストが深くなりすぎないよう、early returnや三項演算子を活用
- パフォーマンス: 条件の順序や辞書を使った最適化を検討
これらの知識を活用して、より良いPythonコードを書いていきましょう。継続的な練習と実践を通じて、if文を自在に操れるようになります。
この記事は2025年の最新情報に基づいて作成されています。Pythonのバージョンアップデートにより、新しい機能が追加される可能性があります。
■らくらくPython塾 – 読むだけでマスター
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。



