PR

【Python】if文:条件分岐を3分でわかりやすく解説(else/elif/if)

Python

Pythonのif文は、特定の条件が真(True)の時に特定のコードを実行する制御フロー文です。

参考 Pythonとは?

"もし○○○なら●●●をする" というように、特定の条件を満たす場合にのみ行う処理を定義することができます。Pythonでも他の言語同様、if文は超・基本知識。

number = 10

if number > 5:
    print("The number is greater than 5.")

# 変数numberが5より大きい場合、
# "The number is greater than 5."というメッセージが表示されます。

参考 print関数の使い方

このページではPython初心者向けにif文(条件分岐)の使い方を0からわかりやすくサンプルコード付きで解説します。

このページで学べる内容
  • Python:if文の基本(条件分岐
    • 比較演算子の使い方
  • else・elif の意味と使い方
  • if文を利用する際の注意点・使い方のコツ

Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。

参考 Pythonの基本文法/構文ルールを3分で復習

スポンサーリンク

Python:if文を利用した条件分岐

Pythonのif文は、特定の条件を満たすかどうかに基づいてプログラムの動作を決定するためのツールです。

これは「もし(if)この条件が真だったら、これをやる」という意味です。条件が偽の場合、if文の中のコードはスキップされます。

簡単な例を見てみましょう。

age = 18

if age >= 18:  # もしageが18以上であれば
    print("投票できます。")  # "投票できます。"と表示する

上記のコードでは、ageという変数が18以上であるかどうかを確認しています。もしageが18以上であれば(つまり、条件が真であれば)、"投票できます。"というメッセージが表示されます。

参考 Pythonの変数の基本

if文には、さらに複雑な制御を可能にするためのelse「もしifの条件が偽であれば、これをやる」)とelif(「もしifの条件が偽で、別の条件が真であれば、これをやる」)を加えることができます。

age = 15

if age >= 18:  # もしageが18以上であれば
    print("投票できます。")  # "投票できます。"と表示する
else:  # そうでなければ
    print("投票するには若すぎます。")  # "投票するには若すぎます。"と表示する

このコードでは、ageが18以上なら"投票できます。"と表示し、そうでなければ(つまり、ageが18未満なら)"投票するには若すぎます。"と表示します。

このように、特定の条件に基づいて処理を変えたいような場合に利用するのがif文です。基本的にはどのプログラミング言語にも存在する構文の1つなので、プログラミング初心者でなければ何となくの処理の概要は理解していることでしょう。

このページではPythonにおけるif文の使い方やコツ、注意点を細かく解説していきます。

Python:if文

if文―基本形
if 条件式:
    # 実行する処理

if文を利用する際には以下3つのルールを守りましょう。

Python:if文の基本ルール
  • インデント(字下げ):Pythonでは、コードブロック(if文の中身など)を示すためにインデントを使用します。if文の後の行はすべてインデントされていなければなりません。多くのPythonプログラマーはインデントにスペース4つを使います。
  • コロン(:):ifキーワードとその後の条件式の最後には必ずコロン(:)が必要です。これは「これからif文のコードブロックが始まる」という意味です。
  • ブール評価:if文の条件はブール(真または偽)の評価結果を返さなければなりません。これは比較演算子(==, !=, >, <, >=, <=)やメソッド、ブール演算子(and, or, not)を使って作ることができます。

参考 比較演算子/ブール演算子の基本を3分で

もしルールを一つでも守っていない場合、当たり前ですがプログラムは正常には動きません。

if 条件式:
    条件式がTrueの場合に行う処理1
  条件式がTrueの場合に行う処理2    # ←この部分のインデントがずれている
  条件式がTrueの場合に行う処理3
    ・・・・・

この場合、処理2の行のインデントがそろっていないためエラーになります。

Python:else文

else文は、if文と一緒に使われ、if文の条件が偽(False)だったときに実行されるブロックを指定します。

構文ルール:else
if 条件式:
    # 条件式が真(True)のときに実行するコード
else:
    # 条件式が偽(False)のときに実行するコード

条件式が「偽:False」の場合に行う処理は「else」の後に記述します。インデント(字下げ)などの基本ルールは、ifと同様です。

elseを利用したサンプルコードがこちら。

age = 16

if age >= 20:  # もしageが20以上であれば
    print("成人です。")  # "成人です。"と表示する
else:  # そうでなければ(つまり、ageが20未満であれば)
    print("未成年です。")  # "未成年です。"と表示する

このコードでは、変数ageが20以上かどうかをチェックします。もしageが20以上(つまり、ifの条件が真)であれば、"成人です。"と表示します。それ以外の場合(つまり、ifの条件が偽)では、"未成年です。"と表示します。

このように、elseを使用することで、特定の条件が偽であったときの動作を明示的に制御することができます。

なお、elseブロックはオプションであり、必ずしも必要というわけではありません。elseがない場合、ifの条件が偽であったときには何も実行されません。

Python:elif文

Pythonのelifは、「else if」の略で、if文とelse文の間に追加の条件をチェックするために使用します。elifの後には新たな条件式が続きます。

構文ルール:elif
if 条件式1:  
    # 条件式1が真(True)のときに実行するコード
elif 条件式2:
    # 条件式1が偽(False)で、条件式2が真(True)のときに実行するコード
else:
    # 全ての条件式が偽(False)のときに実行するコード

以下に具体的な例を示します。

temperature = 20

if temperature < 0:  # もしtemperatureが0未満であれば
    print("寒いです。")  # "寒いです。"と表示する
elif temperature < 30:  # そうでなく、temperatureが30未満であれば
    print("快適です。")  # "快適です。"と表示する
else:  # それ以外の場合(つまり、temperatureが30以上であれば)
    print("暑いです。")  # "暑いです。"と表示する

このコードでは、まずtemperatureが0未満かどうかをチェックします。

もしtemperatureが0未満(つまり、最初のifの条件が真)であれば、"寒いです。"と表示します。それ以外の場合、次にtemperatureが30未満かどうかをチェックします。

temperatureが30未満(つまり、elifの条件が真)であれば、"快適です。"と表示します。最後に、それ以外の全ての場合(つまり、すべての前の条件が偽)では、"暑いです。"と表示します。

このように、elifを使用することで、複数の条件を順番にチェックして適切なコードブロックを実行することができます。また、elifは任意の数だけ書くことができます。

elifの注意点・Tips
  • 順序性elifの条件は上から順に評価され、最初に真となる条件に対応するコードブロックが実行されます。そのため、条件の順序は非常に重要です。前の条件が真と評価された場合、それ以降のelifelseのブロックは無視されます。
  • elseの位置elifの後にelseを配置することで、上記の全ての条件が偽と評価された場合に実行されるコードを定義できます。elseは必ずすべてのifelifの後に配置します。
  • elifの存在elifは必須ではありません。ifelseだけでも構文は成り立ちます。しかし、複数の条件をチェックする必要がある場合にはelifを使用します。
  • インデント:Pythonではインデント(スペースやタブ)を使用してコードブロックを示すため、elififと同じように適切にインデントすることが重要です。

if文のネスト

Pythonのif文はネスト(入れ子)することも可能です。

わかりやすく言うと、if文の中にさらにif文を書くことができる、ということです。

この特性は、より複雑な条件をチェックするためや、特定の条件が真のときだけさらなるチェックを行いたいときなどに便利です。

age = 25
country = "Japan"

if country == "Japan":  # もし国が"Japan"であれば
    if age >= 20:  # さらに、年齢が20以上であれば
        print("あなたは日本で成人です。")  # "あなたは日本で成人です。"と表示する
    else:  # そうでなければ(つまり、年齢が20未満であれば)
        print("あなたは日本で未成年です。")  # "あなたは日本で未成年です。"と表示する

このコードでは、まずcountryが"Japan"かどうかをチェックします。もしcountryが"Japan"(つまり、最初のifの条件が真)であれば、その中の次のif文に進み、ageが20以上かどうかをチェックします。

そして、ageが20以上なら"あなたは日本で成人です。"を表示し、そうでなければ(つまり、ageが20未満なら)"あなたは日本で未成年です。"と表示します。

ネストされたif文を利用する際は、インデントに注意する必要があります。Pythonはインデントを利用してコードのブロック(スコープ)を認識するため、正しくインデントしないとエラーが発生する可能性があります。

ただし、ネストが深すぎる場合、コードが読みづらくなってしまう点に注意。可読性が低くなるとバグが生まれやすくなります。

number = 10
if number > 1:
    print("numberは1以上です")
    if number > 2:
        print("numberは2以上です")
        if number > 3:
            print("numberは3以上です")
            if number > 3:
                print("numberは3以上です")

# numberは1以上です
# numberは2以上です
# numberは3以上です
# numberは3以上です

他のロジックで代替できないか?を検討しましょう。

深すぎるネストを避けるための手法
パターン1
  • 早期リターン: 条件が満たされない場合にすぐに関数からリターンする、またはループを終了する(returnbreakを使用)ことで、深いネストを避けることができます。
def is_adult(age, country):
    if country != "Japan":
        return False
    if age < 20:
        return False
    return True
パターン2
  • 関数の分割: 複雑な条件判断や処理が含まれる場合は、それを新たな関数として定義し、その関数を呼び出すことで、コードの見通しを良くすることができます。
def is_japanese(country):
    return country == "Japan"

def is_adult(age):
    return age >= 20

if is_japanese(country) and is_adult(age):
    print("あなたは日本で成人です。")

参考 Python:def

パターン3
  • 比較演算子の使用: andorを利用して複数の条件を1つのif文で処理することで、ネストを減らすことができます。
if country == "Japan" and age >= 20:
    print("あなたは日本で成人です。")

参考 比較演算子

以上のように、適切な設計やリファクタリングによって、ネストが深くなるのを避けることが可能です。

in / not in

Pythonのinnot inは、ある値が特定のシーケンス(リスト、タプル、文字列、辞書など)の中に存在するかどうかをチェックするために使用します。

参考 リスト・タプル・文字列・辞書

inはその値がシーケンスに存在する場合にTrue、存在しない場合にはFalseを返します。一方、not inはその値がシーケンスに存在しない場合にTrueを返し、存在する場合にはFalseを返します。

これらはif文と一緒に使われることが多いので、以下にサンプルコードを記載しておきます。

サンプル inの使用例

fruits = ["apple", "banana", "cherry"]

if "banana" in fruits:  # もし"banana"がfruitsリストに含まれていれば
    print("バナナが見つかりました。")  # "バナナが見つかりました。"と表示する

サンプル not inの使用例

fruits = ["apple", "banana", "cherry"]

if "grape" not in fruits:  # もし"grape"がfruitsリストに含まれていなければ
    print("ブドウが見つかりませんでした。")  # "ブドウが見つかりませんでした。"と表示する

また、in / not in は文字列の中に特定の部分文字列が存在するかどうかをチェックするのにも使うことができます。

message = "こんにちは、世界"

if "世界" in message:  # もし"世界"がmessage文字列に含まれていれば
    print("メッセージに'世界'が含まれています。")  # "メッセージに'世界'が含まれています。"と表示する

Python:if文のまとめ

if文の基本
  • ifは特定の条件が満たされているかどうかをチェックするために使われる。
    • 条件が真(True)であれば、if文の直後のインデントされたコードブロックが実行される。
    • elseは、ifの条件が偽(False)であった場合に実行されるコードブロックを指定する。
    • elifは、前のifまたはelifの条件が偽(False)であった場合に追加の条件をチェックする。
  • if文はネスト(入れ子)できるが、深いネストはコードの可読性を低下させるため、できるだけ避けるべき。
# if文の使用
temperature = 25

if temperature > 30:  
    print("暑いですね。")  # もしtemperatureが30より大きければ、"暑いですね。"と表示する

# elseの使用
if temperature > 30:
    print("暑いですね。")
else:
    print("涼しいですね。")  # もしtemperatureが30以下であれば、"涼しいですね。"と表示する

# elifの使用
if temperature > 30:
    print("暑いですね。")
elif temperature < 20:
    print("寒いですね。")  # temperatureが30以下かつ、20より小さい場合に"寒いですね。"と表示する
else:
    print("涼しいですね。")

# inとnot inの使用
fruits = ["apple", "banana", "cherry"]

if "apple" in fruits:
    print("リストにリンゴが含まれています。")  # もし"apple"がfruitsリストに含まれていれば、"リストにリンゴが含まれています。"と表示する

# ネストの使用
if "apple" in fruits:
    if temperature > 20:
        print("リンゴがあり、温度は20度以上です。")  # "apple"がfruitsリストに含まれ、かつtemperatureが20以上であれば、"リンゴがあり、温度は20度以上です。"と表示する

始めてPythonを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。

Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!

読者料典 Python入門:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
Python
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました