Pythonのif文(条件分岐)の書き方の解説【elif, else】
- 作成日: 2025-06-09
- 更新日: 2025-07-19
- カテゴリ: 基本
- タグ: if, elif, else
Pythonのif文は、条件によって処理を分岐させる基本的な構文です。本記事ではif、elif、elseの使い方を、構文・実例・比較演算子・論理演算子などを含めて徹底的に解説します。初心者でも理解できるよう、FizzBuzzやじゃんけんなどの実例も紹介しています。
参照するドキュメントは以下になります。
- Pythonのif文(条件分岐)の書き方の解説【elif, else】
Pythonのif文の構造

Pythonのif文の構造は次の通りです。
if 条件式:
処理
上記はもっともシンプルなif文です。
条件式に式を書きます。この式がTrueだと処理が実行されます。
式の結果がFalseであれば処理は実行されません。
Pythonのif文のBNFはどうなってるの?
Pythonのif文のBNFは以下のようになっています。
if_stmt ::= "if" expression ":" suite
("elif" expression ":" suite)*
["else" ":" suite]
出典: 8. if文 — 複合文 (compound statement) — Python 3.6.15 ドキュメント
出典によると上記のようになっています。
BNFは::=
の左側が機能で、右側がその機能の構造になっています。
「if_stmt(if文)」は、まず「if」というキーワードがあり、そのあとに「expression(式)」が来ます。
そして「コロン(:)」が来て、その次に「suite(処理)」が来ます。
その後に0個以上の「elif」の構造が続きます。
elifは「elif」というキーワードが来て、その後に「expression(式)」が来ます。
その後に「コロン(:)」が来て、その後に「suite(処理)」が来ます。
これが0個以上続きます。
その後に「else」の構造が1個または0個あります。
elseは「else」というキーワードが来て、その後に「コロン(:)」が来ます。
その後に「suite(処理)」が来ます。
Pythonのif文のBNF構造を3行で言うとどうなる?
先ほどのPythonのif文のBNF構造は、3行で言うとこうなります。
- if文は「if 式: 処理」で始まる
- その後に0個以上の「elif 式: 処理」が続く
- 最後に「else: 処理」が付いたり付かなかったりする
Pythonのif, elseはどうやって書くの?

Pythonのif文でelseを付けた書き方は以下になります。
if 条件式:
処理1
else:
処理2
条件式がTrueのときは処理1が実行されます。
条件式がFalseのときはelseの処理2が実行されます。
elseはifやelifがいずれもFalseだったときに最終的に実行されるものです。
elseを付けておけば、条件式がすべてFalseだったときの処理を書くことができます。
Pythonのif, elifはどうやって書くの?
Pythonのif文でelifを付けた書き方は以下になります。
if 条件式1:
処理1
elif 条件式2:
処理2
elif 条件式3:
処理3
elifは上の条件式がFalseだったときに条件式が実行されます。
上記の構造では一番最初にif 条件式1
の条件式が評価されます。
条件式1がTrueなら処理1が実行されます。
条件式2がFalseならelif 条件式2
の条件式が評価されます。
条件式2がTrueなら処理2が実行されます。
条件式2がFalseならelif 条件式3
の条件式が評価されます。
条件式3がTruenなら処理3が実行されます。
elifはifの下に無数に付けることができます。
評価される順番は上から下に向かってです。
Pythonのif, elif, elseはどうやって書くの?
Pythonのif文でelifとelseを付けた書き方は以下になります。
if 条件式1:
処理1
elif 条件式2:
処理2
else:
処理3
上記の構造ではまず条件式1が評価されます。
条件式1がFalseなら条件式2の評価に。
それもFalseならelseの処理3が実行されます。
条件式1や条件式2がTrueであればelseの処理3は実行されません。
ifとelseの中間にあるelifは無数に付けることができますが、elseの後に付けることはできません。
Pythonのif文をコードで書くとどうなるの?
Pythonのif文を実際のコードで書くと以下のようになります。
# 条件式に使う変数
n = 1
if n < 2:
print('2より小さい')
# nは1で2より小さいのでここのprint()が実行されます。
上記のコードを実行すると「2より小さい」と表示されます。
これは変数n
の値が1で、2より小さいからです。
if文の「n < 2
」という条件式の結果はTrue(真)になります。
よってprint()
が実行されます。
Pythonのif, elseをコードで書くとどうなるの?
Pythonのif文にelseを付けたコードは以下のようになります。
# 条件式に使う変数
n = 3
if n < 2:
print('2より小さい')
# nは3で2より小さくないのでここのprint()は実行されません。
else:
print('2より小さくない')
# ここのprint()が実行されます。
上記のコードを実行すると「2より小さくない」と表示されます。
これは「n < 2
」という条件式の結果がFalse(偽)になるからです。
条件式の結果がFalseなので、
print('2より小さい')
上記のコードは実行されず、
print('2より小さくない')
上記のコードが実行されます。
Pythonのif, elifをコードで書くとどうなるの?
Pythonのif文にelifを付けたコードは以下のようになります。
# 条件式に使う変数
n = 3
if n < 2:
print('2より小さい')
# nは3で2より小さくないのでここのprint()は実行されません。
elif n < 3:
print('3より小さい')
# nは3で3より小さくないのでここのprint()は実行されません。
elif n < 4:
print('4より小さい')
# nは3で4より小さいのでここのprint()が実行されます。
上記のコードを実行すると「4より小さい」と表示されます。
これは最初に「n < 2
」の条件式が評価されます。
n
は3で、n < 2
がFalse(偽)になるので、次の条件式に行きます。
次にelifの「n < 3
」が評価されます。
これも評価はFalseになるので、次の条件式に行きます。
最後に「n < 4
」が評価されます。
n
は3なので4より小さいです。よってこの式はTrue(真)になります。
そして「print('4より小さい')
」が実行されます。
Pythonのif, elif, elseをコードで書くとどうなるの?
Pythonのif文にelifとelseを付けたコードは以下のようになります。
# 条件式に使う変数
n = 3
if n < 2:
print('2より小さい')
# nは3で2より小さくないのでここのprint()は実行されません。
elif n < 3:
print('3より小さい')
# nは3で3より小さくないのでここのprint()は実行されません。
else:
print('それ以外')
# ここのprint()が実行されます。
これも最初に「n < 2
」が評価されます。結果はFalseです。
次に「n < 3
」が評価されます。これも結果はFalseです。
if-elifでいずれもTrueにならなかったので、elseに行きます。
そしてelseの「print('それ以外')
」が実行されます。
Pythonのif文と比較演算子の関係は?
Pythonのif文では比較演算子がよく使われます。
条件式を書くときにこの比較演算子を使います。
比較演算子は比較をするための演算子です。
何かを比較して判別するときに使われます。
たとえば変数aの中身が3かどうか比較するにはa == 3
と書きます。
こういうことを調べたいときに使うのが比較演算子です。
aとbが等しい(==)
aとbが等しいか判別する演算子がイコール(==)です。
「=」が二つ並んでイコール(==)になります。
一つではないので注意しましょう。
a == b
この演算子はaとbが同じものだったらTrue(真)になります。
たとえば
# 条件式に使う変数
a = 1
b = 1
if a == b:
print('aとbは同じです。')
# aとbはともに1なのでここのprint()が実行されます。
上記のコードは実行すると結果は「aとbは同じです。」と出力されます。
逆には以下では
# 条件式に使う変数
a = 1
b = 2
if a == b:
print('一緒')
# aは1でbは2なのでここのprint()は実行されません。
else:
print('aとbは同じではありません。')
# ここのprint()が実行されます。
上記のコードでは「aとbは同じではありません。」と出力されます。
これはaが1で、bが2で、それぞれ変数の中身が違うからです。
aとbが等しくない(!=)
aとbが等しくないときにTrue(真)になる演算子はノットイコール(!=)です。
a != b
この演算子はaとbが等しくなければTrue(真)、等しければFalse(偽)になります。
# 条件式に使う変数
a = 1
b = 2
if a != b:
print('aとbは等しくないです。')
# aは1でbは2です。等しくないのでここのprint()が実行されます。
上記のコードを実行すると結果は「aとbは等しくないです。」になります。
aは1、bは2で、両方等しくないので「!=」の結果は真になるわけです。
等しい場合はどうでしょうか?
# 条件式に使う変数
a = 1
b = 1
if a != b:
print('等しくない')
# aは1でbも1です。等しいのでここのprint()は実行されません。
else:
print('aとbは等しいです。')
# ここのprint()が実行されます。
上記のコードの実行結果は「aとbは等しいです。」になります。
aとbはそれぞれ1になっていますので、等しいです。よって「!=」の結果はFalse(偽)になります。
aがbより小さい(<)

aがbより小さい時にTrue(真)になる演算子は小なり(<)です。
a < b
aがb「より小さい」です。「以下」ではなく「より小さい」になります。
つまりb自体は含みません。「1 < 2」は「1は2より小さい」になりますが「2 < 2」になった場合はFalse(偽)になります。なぜなら「2より小さい」は「2」を含まないからです。
# 条件式に使う変数
a = 1
b = 2
if a < b:
print('aはbより小さいです。')
# aは1でbは2で、aはbより小さいのでここのprint()が実行されます。
上記のコードの実行結果は「aはbより小さいです。」になります。
aは1、bは2で「1 < 2」になり、結果はTrue(真)になるからです。
ではaが2だったらどうでしょうか。
a = 2
b = 2
if a < b:
print('より小さい')
# aは2、bは2です。aはbより小さくないのでここのprint()は実行されません。
else:
print('aはbより小さくないです。')
# ここのprint()が実行されます。
上記のコードの結果は「aはbより小さくないです。」になります。
aは2、bは2で「2 < 2」になるので結果はFalse(偽)です。
そのためelseのprintが実行されます。
aがb以下(<=)
aがb以下かどうか判定する演算子は以下(<=)になります。
a <= b
aがb以下ならTrue(真)になります。
「a < b」は「より下」でしたが、「a <= b」は「以下」になります。
以下というのはb自身を含みます。つまり「2 <= 2」は真になります。
# 条件式に使う変数
a = 1
b = 2
if a <= b:
print('aはb以下です。' )
# aは1でbは2です。aはb以下なのでここのprint()が実行されます。
上記のコードの実行結果は「aはb以下です。」になります。
aは1、bは2で、aはb以下ですので「a <= b」の結果はTrue(真)になります。
# 条件式に使う変数
a = 3
b = 2
if a <= b:
print('以下')
# aは3でbは2です。aはb以下ではないのでここのprint()は実行されません。
else:
print('aはb以下ではありません。' )
# ここのprint()が実行されます。
上記のコードでは、aは3でbは2です。そのため「a <= b」はFalse(偽)になります。
Falseなのでelseのprintが実行されて結果は「aはb以下ではありません。」になります。
aがbより上(>)
aがbより上な時にTrue(真)になる演算子は大なり(>)です。
a > b
大なりはaがb「より上」、つまりbを含まずに上な時に真になります。
たとえば「2 > 1」は2は1より上なので真、「1 > 1」は左の1は右の1より上ではないので偽になります。
# 条件式に使う変数
a = 2
b = 1
if a > b:
print('aはbより上です。')
# aは2でbは1です。aはbより大きいのでここのprint()が実行されます。
上記のコードを実行すると結果は「aはbより上です。」になります。
aは2で、bは1「2 > 1」は真になるからです。
# 条件式に使う変数
a = 0
b = 1
if a > b:
print('より上')
# aは0でbは1です。aはbより大きくないのでここのprint()は実行されません。
else:
print('aはbより上ではありません。')
# ここのprint()が実行されます。
上記のコードを実行すると「aはbより上ではありません。」と表示されます。
aは0、bは1で、「0 > 1」は偽になるからです。
aがb以上(>=)
aがb以上かどうかチェックする演算子は以上(>=)になります。
a >= b
この演算子はaがb以上ならTrue(真)になります。
つまり「2 >= 2」や「3 >= 2」は真です。
逆に「1 >= 2」などは偽になります。
# 条件式に使う変数
a = 2
b = 2
if a >= b:
print('aはb以上です。')
# aは2でbも2です。aはb以上なのでここのprint()が実行されます。
上記のコードを実行すると「aはb以上です。」と表示されます。
これはaが2で、bが2なので「2 >= 2」になって真になるからです。
# 条件式に使う変数
a = 1
b = 2
if a >= b:
print('以上')
# aは1でbは2です。aはb以上ではないのでここのprint()は実行されません。
else:
print('aはb以上ではありません。')
# ここのprint()が実行されます。
上記のコードを実行すると「aはb以上ではありません。」と表示されます。
これはaが1で、bが2なので「1 >= 2」になって、結果は偽になるからです。
そのためelseのprintが実行されます。
Pythonのif文で複数の条件を書くにはどうしたらいい?
Pythonのif文で複数の条件を指定したい場合はブール演算子を使います。
ブール演算子は「and」や「or」などで、これらの演算子で複数の式を連結します。
また、結果を否定して真偽を逆にしたい場合は「not」を使います。
出典:6. ブール演算 — 式 (expression) — Python 3.13.5 ドキュメント
or_test ::= and_test | or_test "or" and_test
and_test ::= not_test | and_test "and" not_test
not_test ::= comparison | "not" not_test
上記がandやorを含むブール演算のBNFです。
まずor_testがあり、or_testはand_testまたはor
で繋いだor_testとand_testです。
and_testはnot_testまたはand
で繋いだand_testとnot_testです。
not_testはcomparisonかまたはnot
を付けたnot_testです。
優先順位は
not_test > and_test > or_test
になります。
つまり複合分の場合はnot_testがまず評価されtその次にand_testが評価されます。最後にor_testです。
andとor、notは複合的に使用できます。
つまり
1 and 1 or not 1
上記の式は文法的に正しくなります。
優先順位はnotが一番で次がand、最後がorです。
なので、「not 1」が最初に評価されてその次に「1 and 1」が評価されます。
最後に「1 or False(not 1の結果)」が評価されて結果が出ます。
Pythonのand(AかつB)はどうやって書くの?
Pythonの「and」は条件式Aと条件式Bが両方ともTrue(真)だったらTrueになる演算子です。
どちらか一方がFalse(偽)だったらFalseになります。
a and b
出典:6. ブール演算 — 式 (expression) — Python 3.13.5 ドキュメント
繰り返しますが、AとBが両方とも真だったら、真です。
つまり以下のようなコードは真になります。
print(1 and 2) # 1
print(True and True) # True
print(1 + 2 and 3 * 4) # 12
「1 and 2」ではTrueでなく2が返ります。
これはandで判定した値(右側の値2)がそのまま返ります。
整数は0以外はみんな真になります。
andでは先頭の式から順に評価されていきます。
いっぽう、以下のようなコードは偽になります。
print(1 and 0) # 0
print(True and False) # False
print(1 + 2 and 3 * 0) # 0
andを使ったPythonのif文の分岐はどうやって書くの?
andを使ったif文の例としては以下が挙げられます。
# 条件式に使う変数
a = 1
b = 1
c = 1
if a == b and a == c:
print('a == b == c')
# aもbもcも1です。みな等しいのでここのprint()が実行されます。
上記の場合は、「a == b」は「1 == 1」なので真です。
そして次の式の評価に移って「a == c」は「1 == 1」なので真になります。
つまり「真 and 真」になるので、andの結果は真です。
よってprintが実行されます。
出典:6. ブール演算 — 式 (expression) — Python 3.13.5 ドキュメント
Pythonのor(AまたはB)はどうやって書くの?
Pythonの「or」はAまたはBがどちらかが真なら真になります。
両方が偽だった場合は偽です。
a or b
or演算子では最初にaが評価されます。aが偽だったらbが評価されます。aが真であればそこで評価は止まり、結果は真になります。
出典:6. ブール演算 — 式 (expression) — Python 3.13.5 ドキュメント
以下のコードはいずれも真になります。
print(1 or 0) # 1
print(False or True) # True
print(1 == 2 or 2 == 2) # True
上記では「1 or 0」で1が返ってきてることに注意してください。
これは「1」で評価が終わり、真の値として1を返してるからです。
以下のコードはいずれも偽になります。
print(0 or 0) # 0
print(False or False) # False
print(2 < 1 or 1 > 2) # False
orを使ったPythonのif文の分岐はどうやって書くの?
Pythonのif文でorを使った分岐処理を見てみます。
# 条件式に使う変数
a = 1
b = 2
c = 1
if a == b or a == c:
print('True')
# aとbは等しくないですが、aとcは等しいのでここのprint()が実行されます。
上記のコードでは「a == b」は「1 == 2」になり、結果は偽です。
「a == c」は「1 == 1」になり結果は真になります。
or演算子はどちらかが真であれば真になるので結果は真になり、printが実行されます。
出典:6. ブール演算 — 式 (expression) — Python 3.13.5 ドキュメント
Pythonのnot(Aの否定)はどうやって書くの?
「not」は真偽値を逆にします。
つまりTrue(真)をFalse(偽)に、FalseをTrueにします。
not a
出典:6. ブール演算 — 式 (expression) — Python 3.13.5 ドキュメント
以下のコードではそれぞれ真偽値が反転します。
print(not 1) # False
print(not 0) # True
print(not 3.14) # False
print(not 0) # True
print(not '') # True
print(not 'abc') # False
print(not True) # False
print(not False) # True
数値などに使った場合も結果はブール値(True, False)になります。
notを使ったPythonのif文はどうやって書くの?
Pythonのif文ではnotは以下のように使います。
# 条件式に使う変数
a = 0
if not a:
print('True')
# aは0(偽)です。反転させると真になるのでここのprint()が実行されます。
上記のコードでは変数aは0です。それをnotで否定すると0は偽ですので真になります。
結果、if文の中身が実行されてprintで出力されます。
出典:6. ブール演算 — 式 (expression) — Python 3.13.5 ドキュメント
Pythonのif文を使った実践的なコード例を教えて
Pythonのif文を使った実践例を紹介します。
Pythonで書くFizzBuzz

FizzBuzzとは1から100までの数字を表示するプログラムです。
表示するときに数が3の倍数であれば「Fizz」、5の倍数であれば「Buzz」、両方の倍数(15の倍数)であれば「FizzBuzz」と出力します。
コードとしては以下になります。
# 1から101より下までループする
for i in range(1, 101):
if i % 15 == 0:
# 15の剰余を取り0だったら出力
print('FizzBuzz', i)
elif i % 5 == 0:
# 5の剰余を取り0だったら出力
print('Buzz', i)
elif i % 3 == 0:
# 3の剰余を取り0だったら出力
print('Fizz', i)
else:
# それ以外
print(i)
上記のコードを実行すると以下のような結果になります。
1
2
Fizz 3
4
Buzz 5
Fizz 6
7
8
Fizz 9
Buzz 10
11
Fizz 12
13
14
FizzBuzz 15
16
17
Fizz 18
19
Buzz 20
...
このプログラムで使っているのはfor文とif文と剰余演算です。
for文については以下の記事を参照してください。
関連記事:Pythonのfor文(繰り返し処理、ループ)を解説【range, enumerate】
if文については本記事で解説しています。
剰余演算については以下の記事を参照してください。
- TODO:剰余演算
Pythonで書くじゃんけんプログラム
Pythonのif文を使った実践的なプログラムとしては「じゃんけんプログラム」が挙げられます。
サンプルコードは以下です。
# 乱数を使うライブラリをインポート
import random
# 無限ループ
while True:
# プレイヤーのじゃんけんの手
# g ... グー
# c ... チョキ
# p ... パー
try:
hand = input('(g,c,p) > ')
except KeyboardInterrupt:
# 終了するにはCtrl+Cを押す
break
# CPUのじゃんけんの手
cpu = random.choice('gcp')
if hand == 'g':
if cpu == 'g':
print('あいこ') # プレイヤーもCPUがグー
elif cpu == 'c':
print('勝ち') # プレイヤーがグーでCPUがチョキ
elif cpu == 'p':
print('負け') # プレイヤーがグーでCPUがパー
elif hand == 'c':
if cpu == 'g':
print('負け') # プレイヤーがチョキでCPUがグー
elif cpu == 'c':
print('あいこ') # プレイヤーもCPUもチョキ
elif cpu == 'p':
print('勝ち') # プレイヤーがチョキでCPUがパー
elif hand == 'p':
if cpu == 'g':
print('勝ち') # プレイヤーがパーでCPUがグー
elif cpu == 'c':
print('負け') # プレイヤーがパーでCPUがチョキ
elif cpu == 'p':
print('あいこ') # プレイヤーもCPUもパー
上記のコードではwhile文やinputなども使っていて、初心者の方には少し難しいと思います。
わからない所は飛ばして、if文でやってるところを見ましょう。
if hand == 'g':
if cpu == 'g':
print('あいこ') # プレイヤーもCPUがグー
elif cpu == 'c':
print('勝ち') # プレイヤーがグーでCPUがチョキ
elif cpu == 'p':
print('負け') # プレイヤーがグーでCPUがパー
上記ではプレイヤーのじゃんけんの手(hand)が「g」だったら、というif文です。
「g」はじゃんけんの「グー」のことです。
「c」はじゃんけんの「チョキ」で「p」はじゃんけんのパーです。
CPUの手はcpuです。
handがgでcpuもgだったら「グー対グー」で「あいこ」になります。
handがgでcpuがcだったら「グー対チョキ」でプレイヤーの勝ちです。
handがgでcpuがpだったら「グー対パー」でプレイヤーの負けです。
こんな感じでhandがcやpの時もif文で分岐します。
これがじゃんけんプログラムの実装の一例です。
if文はどの言語が発祥なの?
Pythonに実装されているif文はどの言語が発祥なのでしょうか?
調べてみたところ、どうやらFortran(フォートラン、1957年)ですでにif文が実装されていたようです。
Fortranのif文は以下のようなコードでした。
IF (X .GT. 0) GOTO 100
条件式とGOTO文を組み合わせて使う形式で、条件が真の場合はGOTOして行に飛びます。
Pythonにはgoto文はありませんが、Pythonだと以下のようなコードになるでしょう。
X = 1
if X > 0:
print('gt')