Python最先端

  • ホーム
  • Pythonのif文(条件分岐)の書き方の解説【elif, else】

Pythonのif文(条件分岐)の書き方の解説【elif, else】

  • 作成日: 2025-06-09
  • 更新日: 2025-07-19
  • カテゴリ: 基本
  • タグ: if, elif, else

Pythonのif文は、条件によって処理を分岐させる基本的な構文です。本記事ではif、elif、elseの使い方を、構文・実例・比較演算子・論理演算子などを含めて徹底的に解説します。初心者でも理解できるよう、FizzBuzzやじゃんけんなどの実例も紹介しています。

参照するドキュメントは以下になります。

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')  

カテゴリー