Pythonのif文とは、「条件式がTrueと見なされるときだけ、字下げしたブロックを実行する」ための構文です。 if 条件式: と書いて行末にコロンを置き、次の行から半角スペース4つで字下げした処理を並べます。条件を追加したいときは elif、どれにも当てはまらないときの処理は else で書きます。

この記事では、if・elif・elseの基本から、and・or・notを使った条件式、短絡評価、a < b < c の連結比較、in と is、三項演算子までを1ページにまとめました。すべてのコードに実行結果を付け、コロン忘れのSyntaxError、IndentationError、= と == の取り違えは実際にエラーを出してから直し方を示しています。実行環境は Python 3.14.7 です(エラーメッセージの文面はバージョンによって少し変わります)。

Python if文の早見表

構文の早見表

やりたいこと 書き方 ポイント
条件に合うときだけ実行 if x > 0: 行末にコロン、次の行から字下げ
別の条件を追加 elif x == 0: 何個でも書ける。上から順に判定
どれにも合わないとき else: 条件式は書かない。最後に1つだけ
両方を満たす if a and b: 左がFalseなら右は評価されない
どちらかを満たす if a or b: 左がTrueなら右は評価されない
条件を反転 if not a: 比較演算子より後に評価される
範囲に入っているか if 0 <= x < 10: 連結比較。andでつなぐのと同じ
候補のどれかと一致 if x in ("a", "b"): x == "a" or x == "b" を短く書ける
Noneかどうか if x is None: Noneの判定は is を使う
1行で値を選ぶ y = "A" if x else "B" 三項演算子(条件式)
何もしないブロック pass ブロックを空にはできないため置く

比較演算子の早見表

演算子 意味 例 結果
== 等しい 5 == 5 True
!= 等しくない 5 != 8 True
< より小さい 5 < 8 True
<= 以下 5 <= 5 True
> より大きい 5 > 8 False
>= 以上 5 >= 8 False
in 含まれる "a" in "abc" True
not in 含まれない 4 not in [1, 2, 3] True
is 同じオブジェクト x is None xがNoneならTrue
is not 同じオブジェクトでない x is not None xがNone以外ならTrue

論理演算子の早見表

演算子 意味 返す値 優先順位
not x 反転 xが偽ならTrue、それ以外はFalse 高い(3つの中で最初)
x and y かつ xが偽ならx、それ以外はy 中
x or y または xが真ならx、それ以外はy 低い(3つの中で最後)

比較演算子(== や < など)は、この3つよりも先に評価されます。

Falseと見なされる値の早見表

分類 Falseと見なされる値 まちがえやすいTrueの値
定数 False、None ―
数値のゼロ 0、0.0、0j、Decimal(0)、Fraction(0, 1) -1、0.1
空の文字列 ""、b"" "0"、" "(空白1つ)、"False"
空のコレクション []、()、{}、set()、range(0) [0]、[[]]、(None,)

上の4つ以外の値は、基本的にTrueと見なされます。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Python if文の書き方|elif・elseとand・or・notの条件式」

if・elif・elseの基本の書き方

if文は「if → elif(0個以上)→ else(0個か1個)」の順に書きます。上から順に条件を調べ、最初に当てはまった1つのブロックだけを実行します。

score = 72

if score >= 80:
    print("合格(優)")
elif score >= 60:
    print("合格")
else:
    print("再挑戦")

print("判定おわり")
合格
判定おわり

score は72なので、最初の条件 score >= 80 はFalse、次の score >= 60 がTrueになり「合格」だけが表示されます。字下げしていない最後の print は、if文の外にあるので条件に関係なく実行されます。

flowchart TD
    A[開始] --> B{score >= 80}
    B -- True --> C[合格(優)]
    B -- False --> D{score >= 60}
    D -- True --> E[合格]
    D -- False --> F[再挑戦]
    C --> G[判定おわり]
    E --> G
    F --> G

書き方の3つの決まり

決まり 内容
行末にコロン if、elif、else の行は必ず : で終える
字下げでブロックを表す 半角スペース4つがPythonの標準的な書き方。同じブロックは同じ幅にそろえる
elseに条件は書かない else: だけを書く。条件を付けたいときは elif を使う

Pythonには波かっこ {} でブロックを囲む書き方がなく、字下げそのものが文法です。字下げの幅がずれるとエラーになります(後半で再現します)。

elifは順番で結果が変わる

elifは上から順に判定されるため、範囲の狭い条件から先に書くのがコツです。

def grade_if(score):
    if score >= 90:
        return "A"
    elif score >= 80:
        return "B"
    elif score >= 70:
        return "C"
    return "D"

# 上から順に判定され、最初に当てはまった1つだけが実行される
print([grade_if(s) for s in (95, 85, 75, 40)])

def grade_wrong(score):
    if score >= 70:      # 広い条件を先に書くと、90点もここで止まる
        return "C"
    elif score >= 80:
        return "B"
    elif score >= 90:
        return "A"
    return "D"

print([grade_wrong(s) for s in (95, 85, 75, 40)])
['A', 'B', 'C', 'D']
['C', 'C', 'C', 'D']

2つ目の関数では、95点も85点も最初の score >= 70 に当てはまるので、すべて「C」になります。

ifを並べる書き方とelifのちがい

elif ではなく if を並べると、それぞれが独立して判定され、当てはまるものがすべて実行されます。

score = 95
if score >= 70:
    print("70以上")
if score >= 80:
    print("80以上")
if score >= 90:
    print("90以上")
70以上
80以上
90以上
書き方 実行されるブロック 向いている場面
if … elif … else 最初に当てはまった1つだけ ランク分け、種類ごとの振り分け
if を並べる 当てはまるものすべて 互いに関係のない複数のチェック

比較演算子で条件式を作る

条件式は、評価するとTrueかFalseになる式です。比較演算子の結果を print で確かめてみます。

a, b = 5, 8
print("a == b :", a == b)
print("a != b :", a != b)
print("a <  b :", a < b)
print("a <= b :", a <= b)
print("a >  b :", a > b)
print("a >= b :", a >= b)
print('"apple" < "banana" :', "apple" < "banana")
print('"10" == 10 :', "10" == 10)
print("1 == 1.0 :", 1 == 1.0)
print("[1, 2] == [1, 2] :", [1, 2] == [1, 2])
a == b : False
a != b : True
a <  b : True
a <= b : True
a >  b : False
a >= b : False
"apple" < "banana" : True
"10" == 10 : False
1 == 1.0 : True
[1, 2] == [1, 2] : True
  • 文字列どうしは辞書順(文字コード順)で比べられます。
  • 文字列の "10" と数値の 10 は等しくなりません。エラーにはならず、Falseになるだけなので気づきにくいところです。
  • 整数の 1 と小数の 1.0 は、値が同じなのでTrueです。

文字列と数値を比べるとTypeErrorになる

input() で受け取った値は文字列です。そのまま数値と大小を比べるとTypeErrorになります。

age_text = "20"          # input() の戻り値は文字列
print(age_text == 20)    # 型がちがうので False(エラーにはならない)
try:
    if age_text >= 18:
        print("成人")
except TypeError as e:
    print("TypeError:", e)

age = int(age_text)      # 数値に変換してから比べる
if age >= 18:
    print("成人")
False
TypeError: '>=' not supported between instances of 'str' and 'int'
成人

== はFalseになるだけ、>= などの大小比較はTypeError、という違いがあります。どちらも int() や float() で数値に変換してから比べると解決します。

and・or・notで複数の条件を組み合わせる

演算子 読み方 Trueになるとき
A and B AかつB AとBの両方が真
A or B AまたはB AとBのどちらかが真
not A Aでない Aが偽
age = 25
is_member = True
stock = 0

if age >= 18 and is_member:
    print("and: 両方Trueなので実行")

if stock > 0 or is_member:
    print("or : どちらかTrueなので実行")

if not stock:
    print("not: stockが0(Falseと見なされる)なので実行")

# 優先順位: not > and > or
print(True or False and False)       # and が先
print((True or False) and False)     # かっこで順番を変える
print(not 1 == 2)                    # 比較が先、そのあと not
print(not True or True)              # (not True) or True
and: 両方Trueなので実行
or : どちらかTrueなので実行
not: stockが0(Falseと見なされる)なので実行
True
False
True
True

andとorの優先順位

優先順位は「比較演算子 → not → and → or」の順です。掛け算が足し算より先に計算されるのと同じように、andはorより先にまとまります。

書いた式 Pythonの解釈 結果
True or False and False True or (False and False) True
(True or False) and False かっこの中が先 False
not 1 == 2 not (1 == 2) True
not True or True (not True) or True True

andとorを1つの条件式に混ぜるときは、かっこを付けて意図を示すと読みまちがいを防げます。if is_admin or (is_member and age >= 18): のように、優先順位どおりであってもかっこを書いておくと、あとで読む人に親切です。

短絡評価:必要なところまでしか評価されない

andとorは左から順に評価し、結果が決まった時点で残りを評価しません。これを短絡評価(ショートサーキット)と呼びます。どちらが呼ばれたかを表示する関数で確かめます。

def check(name, result):
    print(f"  {name} を評価")
    return result

print("and: 左がFalseなら右は評価されない")
print(check("A", False) and check("B", True))

print("or : 左がTrueなら右は評価されない")
print(check("A", True) or check("B", False))

# 応用1: 空リストでも IndexError にならない
items = []
if items and items[0] == "apple":
    print("先頭はapple")
else:
    print("空、または先頭がapple以外")

# 応用2: and / or は True・False ではなく「最後に評価した値」を返す
print("" or "ゲスト")
print("田中" or "ゲスト")
print(0 and 100)
print(5 and 100)
and: 左がFalseなら右は評価されない
  A を評価
False
or : 左がTrueなら右は評価されない
  A を評価
True
空、または先頭がapple以外
ゲスト
田中
0
100

どちらの例でも「B を評価」は表示されていません。この性質には2つの使い道があります。

使い道 書き方 説明
前提条件を先に確かめる if items and items[0] == "apple": リストが空なら items[0] は評価されないのでIndexErrorにならない
既定値を与える name = text or "ゲスト" text が空文字なら右側の値が使われる

2つ目は便利ですが、0 や空リストも「偽」として扱われる点に注意が必要です。「0は有効な値として残したい」場合は x if x is not None else 既定値 と書くと意図どおりになります。

Falseと見なされる値を確かめる

if文の条件式には、TrueとFalse以外の値も書けます。Pythonは値を真偽に読み替えて判定します。bool() で確かめた結果が次のとおりです。

from decimal import Decimal
from fractions import Fraction

values = [False, None, 0, 0.0, 0j, Decimal(0), Fraction(0, 1),
          "", (), [], {}, set(), range(0), b"",
          "0", " ", "False", [0], [[]], (None,), -1, 0.1]

for v in values:
    print(f"{v!r:<16} -> {bool(v)}")
False            -> False
None             -> False
0                -> False
0.0              -> False
0j               -> False
Decimal('0')     -> False
Fraction(0, 1)   -> False
''               -> False
()               -> False
[]               -> False
{}               -> False
set()            -> False
range(0, 0)      -> False
b''              -> False
'0'              -> True
' '              -> True
'False'          -> True
[0]              -> True
[[]]             -> True
(None,)          -> True
-1               -> True
0.1              -> True

Python公式ドキュメント(組み込み型の「真理値判定」、今回3.14.8版のページで確認)でも、偽と見なされるのは「NoneとFalse」「数値のゼロ」「空のシーケンスとコレクション」の3グループと説明されています。文字列の "0" や "False"、要素が1つでも入ったリストはTrueです。

この性質を使うと、空かどうかの判定を短く書けます。

やりたいこと 短い書き方 同じ意味の書き方
リストが空でない if items: if len(items) > 0:
リストが空 if not items: if len(items) == 0:
文字列が空でない if text: if text != "":
Noneかどうかだけ調べたい if x is None: (if not x: だと0や空文字も含まれる)

a < b < cの連結比較で範囲を判定する

Pythonでは比較演算子をつなげて書けます。0 < x < 10 は 0 < x and x < 10 と同じ意味です。

x = 7
print(0 < x < 10)          # 0 < x and x < 10 と同じ
print(0 < x <= 5)
print(1 == 1.0 == True)    # 3つとも等しいか
print(1 < 3 > 2)           # 1 < 3 and 3 > 2

temp = 22
if 18 <= temp < 26:
    print("快適")

def get():
    print("  get() を呼び出し")
    return 7

print(0 < get() < 10)      # 真ん中の式は1回だけ評価される

# 注意: != をつなげても「全部ちがう」にはならない
a, b, c = 1, 2, 1
print(a != b != c)                 # a != b and b != c
print(len({a, b, c}) == 3)         # 全部ちがうかは集合で確認
True
False
True
True
快適
  get() を呼び出し
True
True
False
  • 真ん中の式(ここでは get())は1回だけ評価されます。0 < get() and get() < 10 と書くと2回呼ばれるので、連結比較のほうが無駄がありません。
  • 連結比較は「となり合う2つ」を順に比べるだけです。a != b != c は a と c を比べないので、a と c が同じ値でもTrueになります。

inとisで「含まれるか」「同じものか」を調べる

fruits = ["apple", "banana", "orange"]
print("banana" in fruits)
print("grape" not in fruits)
print("nan" in "banana")            # 文字列は部分一致
print("id" in {"id": 1, "name": "A"})   # 辞書はキーを調べる
print(5 in range(1, 10))

role = "editor"
if role in ("admin", "editor"):
    print("編集できます")

# is は「同じオブジェクトか」、== は「値が等しいか」
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b, a is b)
print(a == c, a is c)

value = None
if value is None:
    print("値はまだありません")
if value is not None:
    print("ここは実行されない")
True
True
True
True
True
編集できます
True False
True True
値はまだありません
演算子 調べること 使う場面
in / not in 要素・部分文字列・キーが含まれるか 候補のどれかと一致するか、禁止語が含まれるか
== / != 値が等しいか 数値・文字列・リストの中身の比較
is / is not 同じオブジェクトか None、True、False との比較

a と b は中身が同じ別々のリストなので、== はTrue、is はFalseになります。値を比べたいときは ==、Noneかどうかを調べたいときは is None と覚えておくと迷いません。

三項演算子で1行にまとめる

「条件によって値を選ぶだけ」のときは、三項演算子(条件式)で1行に書けます。形は Trueのときの値 if 条件式 else Falseのときの値 です。

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

n = 0
print("ゼロ" if n == 0 else "正" if n > 0 else "負")

stock = 3
print(f"在庫: {'あり' if stock else 'なし'}")

nums = [1, 2, 3, 4, 5]
print(["偶数" if n % 2 == 0 else "奇数" for n in nums])
成人
ゼロ
在庫: あり
['奇数', '偶数', '奇数', '偶数', '奇数']
書き方 向いている場面
三項演算子 代入する値を2つから選ぶ、f文字列や内包表記の中で値を切り替える
通常のif文 処理が複数行ある、分岐が3つ以上ある、分岐ごとに行う処理がちがう

三項演算子は重ねて書けますが、2つ以上重ねると読み取りに時間がかかります。分岐が3つ以上なら通常のif・elif・elseに戻すと読みやすさを保てます。

長い条件式を読みやすく書く

かっこで囲んで複数行に分ける

条件が長くなったら、全体を丸かっこで囲むと途中で改行できます。行頭に and や or を置くと、条件の増減がしやすくなります。

age, is_member, points, country = 30, True, 1200, "JP"

if (
    age >= 18
    and is_member
    and points >= 1000
    and country in ("JP", "US")
):
    print("特典の対象です")

scores = [72, 85, 90]
if all(s >= 60 for s in scores):
    print("全員60点以上")
if any(s >= 90 for s in scores):
    print("90点以上が1人以上いる")

# 条件に名前を付けると読みやすい
is_adult = age >= 18
has_enough_points = points >= 1000
if is_adult and has_enough_points:
    print("条件を変数にまとめた書き方")
特典の対象です
全員60点以上
90点以上が1人以上いる
条件を変数にまとめた書き方
方法 書き方 効果
かっこで改行 if ( … ): 1行に1条件で並べられる
all() all(条件 for x in リスト) 「すべて満たす」をandの連続なしで書ける
any() any(条件 for x in リスト) 「1つでも満たす」をorの連続なしで書ける
条件を変数にする is_adult = age >= 18 条件に名前が付き、意図が伝わる

ネストを浅くする(早めにreturnする)

if文の中にif文を書くことをネスト(入れ子)と呼びます。ネストが深くなったら、「当てはまらない場合を先に返す」形に並べ替えると、字下げが1段にそろいます。

def can_order_nested(user, stock, quantity):
    if user is not None:
        if stock > 0:
            if quantity <= stock:
                return "注文できます"
            else:
                return "在庫が足りません"
        else:
            return "在庫切れです"
    else:
        return "ログインしてください"

def can_order(user, stock, quantity):
    if user is None:
        return "ログインしてください"
    if stock <= 0:
        return "在庫切れです"
    if quantity > stock:
        return "在庫が足りません"
    return "注文できます"

for args in [(None, 5, 1), ("sato", 0, 1), ("sato", 5, 9), ("sato", 5, 2)]:
    print(can_order_nested(*args), "/", can_order(*args))
ログインしてください / ログインしてください
在庫切れです / 在庫切れです
在庫が足りません / 在庫が足りません
注文できます / 注文できます

2つの関数は同じ結果を返しますが、下の書き方は上から順に読むだけで流れが追えます。

値で振り分けるなら辞書やmatch文も使える

「変数の値ごとに結果を決める」だけなら、if・elifのほかに辞書とmatch文(Python 3.10以降)でも書けます。

status = 404

# if-elif
if status == 200:
    msg = "成功"
elif status == 404:
    msg = "見つかりません"
else:
    msg = "その他"
print(msg)

# 辞書で対応表にする
messages = {200: "成功", 404: "見つかりません"}
print(messages.get(status, "その他"))

# match文(Python 3.10以降)
match status:
    case 200:
        msg = "成功"
    case 404:
        msg = "見つかりません"
    case _:
        msg = "その他"
print(msg)
見つかりません
見つかりません
見つかりません
書き方 向いている場面
if・elif・else 大小比較や複数の変数を組み合わせた条件
辞書 + get() 値と結果が1対1で対応する。対応表が増えていく
match文 値やデータの形で振り分ける。Python 3.10以降

よくあるエラーを再現して直す

ここからは、if文で出会いやすいエラーを実際に発生させ、メッセージと直し方を並べます。すべて Python 3.14.7 で実行した結果です(ファイルのパスは短く表記しています)。

エラーメッセージの早見表

エラーメッセージ 原因 直し方
SyntaxError: expected ':' 行末のコロンがない/else if と書いた : を付ける/elif に直す
IndentationError: expected an indented block after 'if' statement on line N ifの次の行が字下げされていない/ブロックが空 スペース4つで字下げする/pass を置く
IndentationError: unexpected indent 必要のない字下げがある 前の行と幅をそろえる
IndentationError: unindent does not match any outer indentation level 字下げを戻した幅がどの段とも合わない 外側のブロックと幅をそろえる
TabError: inconsistent use of tabs and spaces in indentation タブとスペースが混ざっている スペースに統一する
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? 条件式に = を書いた == に直す
SyntaxError: 'elif' block follows an 'else' block elseのあとにelifを書いた elseを最後に移す
SyntaxError: invalid syntax(=> の位置) => と書いた >= に直す
TypeError: '>=' not supported between instances of 'str' and 'int' 文字列と数値を大小比較した int() などで変換する

コロン忘れのSyntaxError

直す前:

score = 72
if score >= 60
    print("合格")
  File "e01.py", line 2
    if score >= 60
                  ^
SyntaxError: expected ':'

^ がコロンの入るべき位置を指しています。直した後:

score = 72
if score >= 60:
    print("合格")

ほかの言語に慣れていると else if と書きたくなりますが、Pythonでは elif です。else if score >= 60: と書いた場合も、else の直後にコロンがないと判断されて同じ SyntaxError: expected ':' になります。

  File "e06.py", line 4
    else if score >= 60:
         ^^
SyntaxError: expected ':'

IndentationError(字下げのエラー)3種類

1. ifの次の行を字下げしていない

score = 72
if score >= 60:
print("合格")
  File "e02.py", line 3
    print("合格")
    ^^^^^
IndentationError: expected an indented block after 'if' statement on line 2

「2行目のif文のあとには字下げしたブロックが必要」という意味です。print の前にスペースを4つ入れると直ります。ブロックの中身をコメントだけにした場合も同じエラーになるので、あとで書く場所には pass を置きます。

2. 必要のない字下げがある

score = 72
if score >= 60:
    print("合格")
      print("おめでとう")
  File "e03.py", line 4
    print("おめでとう")
IndentationError: unexpected indent

4行目のスペースを4つにそろえると直ります。

3. 字下げを戻した幅が合わない

score = 72
if score >= 60:
    print("合格")
  print("おめでとう")
  File "e04.py", line 4
    print("おめでとう")
                  ^
IndentationError: unindent does not match any outer indentation level

4行目はスペース2つで、ifのブロック(4つ)にも、外側(0)にも合っていません。ブロックの中に入れるなら4つ、外に出すなら0にします。

タブとスペースを混ぜた場合は TabError: inconsistent use of tabs and spaces in indentation になります。エディタの設定で「タブキーでスペース4つを入力する」にしておくと、この種類のエラーは起きにくくなります。

=と==の取り違え

= は代入、== は比較です。条件式に = を書くとSyntaxErrorになります。

score = 72
if score = 72:
    print("72点です")
  File "e05.py", line 2
    if score = 72:
       ^^^^^^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

Pythonが「== か := のまちがいではありませんか」と教えてくれます。値を比べたいので if score == 72: に直します。

記号 意味 例
= 代入(変数に値を入れる) score = 72
== 比較(等しいか調べる) if score == 72:
:= 代入しながらその値を使う(セイウチ演算子、Python 3.8以降) if (n := len(data)) >= 3:

>= を => と書いた場合は、ヒントなしの SyntaxError: invalid syntax になります。「不等号が先、イコールが後」(>=、<=、!=)と覚えておくと安心です。

elseのあとにelifを書いた

score = 72
if score >= 80:
    print("優")
else:
    print("再挑戦")
elif score >= 60:
    print("合格")
  File "e07.py", line 6
    elif score >= 60:
    ^^^^
SyntaxError: 'elif' block follows an 'else' block

else は必ず最後に書きます。elif を else の前に移すと直ります。

エラーにならないが結果が意図とちがう書き方

エラーメッセージが出ないぶん、気づきにくい書き方を2つ紹介します。

answer = "no"

# 直す前: (answer == "yes") or "y" と解釈される。"y" は空でない文字列なので常にTrue
if answer == "yes" or "y":
    print("直す前: 実行される(意図とちがう)")

# 直した後
if answer == "yes" or answer == "y":
    print("ここは実行されない")
if answer in ("yes", "y"):
    print("ここも実行されない")
print("直した後: no は条件に当てはまらない")

# 小数の比較
print(0.1 + 0.2 == 0.3)
print(0.1 + 0.2)
import math
print(math.isclose(0.1 + 0.2, 0.3))
直す前: 実行される(意図とちがう)
直した後: no は条件に当てはまらない
False
0.30000000000000004
True
書き方 起きること こう書くとよい
if x == "yes" or "y": "y" が単独で評価され、常にTrue if x in ("yes", "y"):
if 0.1 + 0.2 == 0.3: 小数の誤差でFalse math.isclose(a, b) で比べる
if x == None: 動くが、Noneの判定としては is が標準的 if x is None:
if flag == True: 動くが冗長 if flag:

1つ目は、日本語の「yesまたはy」をそのまま式にした形です。orの左右には、それぞれ完結した条件式を書くことを意識すると防げます。

知っておくと便利な書き方

data = [3, 8, 1]
if (n := len(data)) >= 3:
    print(f"要素が{n}個あります")

x = 5
if x > 3: print("1行でも書ける(短い処理だけにする)")

if x > 100:
    pass    # あとで書く場所には pass を置く
print("pass は何もしない")
要素が3個あります
1行でも書ける(短い処理だけにする)
pass は何もしない
  • セイウチ演算子 := は、条件式の中で変数に代入し、その値をブロックの中でも使えるようにします。
  • 処理が1つだけなら if 条件: 処理 と1行に書けますが、通常は改行して字下げするほうが読みやすくなります。
  • pass は「何もしない」文です。ブロックを空にできないPythonで、場所だけ先に作っておくときに使います。

if文を書いたあとのチェックリスト

確認すること 見るポイント
コロンを付けたか if・elif・else の行末に : があるか
字下げがそろっているか 同じブロックはスペース4つでそろっているか。タブが混ざっていないか
== を使っているか 条件式の中に = が1つだけの箇所がないか
elifの順番 範囲の狭い条件から書いているか
型がそろっているか 文字列と数値を比べていないか(input() の値は int() で変換)
orの左右が完結しているか x == 1 or 2 のような書き方になっていないか
Noneの判定 is None / is not None を使っているか
andとorの混在 かっこで意図を示しているか

よくある質問

Q. elifとelseは必ず書く必要がありますか? A. どちらも省略できます。if だけでも動きます。elif は何個でも書けますが、else は最後に1つだけです。「どれにも当てはまらないときは何もしない」のであれば、else を書かない形で問題ありません。

Q. if x: と if x is not None: はどうちがいますか? A. if x: は、xが 0、空文字、空リストなどのときもブロックを実行しません。if x is not None: は、xがNone以外であれば 0 や空文字でも実行します。「0も有効な値」として扱いたいときは is not None を使います。

Q. andとorはどちらが先に評価されますか? A. andが先です。A or B and C は A or (B and C) と解釈されます。順番を変えたいとき、または読む人に意図を伝えたいときは、かっこを付けます。

Q. Pythonにswitch文はありますか? A. switchという名前の文はありません。if・elif・elseで書くか、Python 3.10以降であればmatch文が使えます。値と結果が1対1で対応するだけなら、辞書の get() も簡潔です。

まとめ

  • if文は if 条件式: のあとに字下げしたブロックを書く。elifは何個でも、elseは最後に1つだけ
  • 上から順に判定し、最初に当てはまった1つだけ実行される。elifは範囲の狭い条件から書く
  • 優先順位は「比較 → not → and → or」。andとorを混ぜるときはかっこで意図を示す
  • andとorは短絡評価。左側で結果が決まれば右側は評価されず、返すのは最後に評価した値
  • Falseと見なされるのは None・False・数値のゼロ・空のコレクション。"0" や [0] はTrue
  • 範囲は 0 <= x < 10、候補は in、Noneは is None で書くと短く正確になる
  • コロン忘れは expected ':'、字下げはIndentationError、= は「Maybe you meant '=='」。メッセージの行番号と ^ の位置を見れば直せる

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Python if文の書き方|elif・elseとand・or・notの条件式」

株式会社RJCでは、Pythonのif文と条件式の書き方を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?