Python | 文法の基本:if

Python
スポンサーリンク

if の概要(条件による分岐の基本)

if は「もし条件が成り立つなら、この処理をする」を書くための文法です。条件式は True/False を返し、True のときだけブロック内のコードが実行されます。行末のコロン「:」と、その次の行からのインデント(字下げ)が必須です。else は「成り立たなかったとき」、elif は「別の条件も試す」ために使います。


基本構文とインデント(ここが重要)

if、elif、else の書き方

条件式の後に「:」、次の行からブロックをインデントして書きます。同じ深さのインデントが同一ブロックです。

score = 85
if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
else:
    print("D")
Python

インデントは半角スペース4つが推奨です。タブとスペースの混在はエラーや誤動作の原因になります。

条件式は True/False を返す

比較演算子(==, !=, <, <=, >, >=)や論理演算子(and, or, not)を組み合わせて条件式を作ります。

age = 20
is_member = True
if age >= 18 and is_member:
    print("購入できます")
Python

Truthy/Falsy と安全な条件の書き方(深掘り)

値そのものが条件になる性質

Pythonでは、空文字 “”、空のコンテナ([], {}, set())、0、None、False は「偽(Falsy)」として扱われ、それ以外は多くが「真(Truthy)」です。

items = []
if not items:     # 空ならTrue
    print("空です")

name = "  "
if name.strip():  # 前後空白を除去して非空か判定
    print("名前あり")
Python

None と 0 の区別

どちらも Falsy ですが意味が違います。未設定(None)と有効な値(0)を区別したいときは、is を使って None を明示的に判定します。

limit = None
if limit is None:
    print("未設定")
elif limit == 0:
    print("0は有効値")
Python

連鎖比較と読みやすさの工夫

範囲判定を短く書く

Pythonは比較を連鎖できます。数学の書き方に近く、可読性が高いです。

score = 85
if 80 <= score < 90:
    print("B帯")
Python

ネストを浅く保つ(早期リターン)

深い入れ子は読みにくくなります。否定条件は先に処理して「早期終了」する習慣をつけると、if がシンプルになります。

def can_buy(age, stock, suspended):
    if suspended:
        return False
    if age < 18:
        return False
    if stock <= 0:
        return False
    return True
Python

一行で書く条件式(条件演算子)と注意点

条件演算子で短く表現

「A なら X、そうでなければ Y」を1行で書けます。表示や代入のときに便利です。

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

式が長くなると読みにくいので、複雑なロジックでは通常の if/elif/else を使う方が安全です。


例題で身につける(よくある現場パターン)

例題1:ユーザー入力のバリデーション

空白や未設定を弾き、長さの範囲で判定します。

def is_valid_username(name: str | None) -> bool:
    if name is None:
        return False
    name = name.strip()
    if not name:
        return False
    return 2 <= len(name) <= 20

print(is_valid_username(" 太郎 "))  # True
print(is_valid_username(" "))       # False
print(is_valid_username(None))      # False
Python

例題2:料金区分(連鎖比較で範囲判定)

age = 15
if age < 6:
    fee = 0
elif 6 <= age < 13:
    fee = 300
elif 13 <= age < 18:
    fee = 500
else:
    fee = 800
print(f"料金: {fee}円")
Python

例題3:安全な割引適用(短絡評価の発想)

停止中ユーザーは即終了。会員 or クーポン保持で割引。

def apply_discount(price: int, is_member: bool, has_coupon: bool, suspended: bool) -> int:
    if suspended:
        return price
    eligible = is_member or has_coupon
    return int(price * (0.9 if eligible else 1.0))

print(apply_discount(1000, True, False, False))   # 900
Python

例題4:ファイルの拡張子チェック(startswith/endswith)

name = "report.csv"
if name.endswith(".csv"):
    print("CSVとして処理します")
else:
    print("対象外です")
Python

よくある落とし穴と対策(重要ポイント)

コロンの付け忘れとインデントずれ

if、elif、else の行末に「:」を忘れると構文エラー。ブロック内の全行を同じ深さにそろえます。エディタで「タブをスペースに変換」「インデント幅4」を設定しましょう。

比較と代入の取り違え

「== は比較、= は代入」です。if の条件に代入は書けません(構文エラーになります)。混同を避けるため、条件式は比較・論理のみにします。

文字列・数値の比較の誤り

異なる型(例えば “10” と 10)を大小比較すると TypeError や意図しない判定になります。必要なら型変換してから比較します。


まとめ

if は「条件で流れを切り替える」ための核となる文法です。コロンとインデントを正しく使い、Truthy/Falsy の性質を理解しつつ、None と 0 の区別を明示しましょう。範囲は連鎖比較で簡潔に、ネストは早期リターンで浅く保つ。一行の条件演算子は短く表現したい場面だけに絞る——この基本を押さえると、初心者でも読みやすく堅牢な分岐ロジックが自然に書けるようになります。

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