Pythonプログラミングの学びを進める中で序盤に「処理を分岐して実装したい」ということがあると思います。
そこで必要になるのが「if文」の知識です。
「if文」はPythonに限らず、ほとんどのプログラミング言語においてなくてはならない構文になります。
本記事では、「if文」の基本から応用テクニックまでコード例も用いて紹介していきますので、学習やコードの最適化などの参考にしてみてください。
目次
1.Pythonのif文とは
if文の概要
Pythonに限らず「if文」とは、処理における条件設定を行う構文です。
具体的には「もし○○なら○○を実行する」というような「特定の条件」を満たした場合と満たさない場合で「実行する処理」を設定する際に使用します。
if文の基本構文
Pythonにおけるif文の基本構文は以下の通りです。
if 条件式: 処理 |
処理内容としては以下のようになります。
「条件式」を満たす(真:True)の場合は「処理」を実行
「条件式」を満たさない(偽:False)の場合は「処理」をスキップ
上記の構文でPythonでif文を書く際のポイントは以下の通りです。
条件式の後に「:(コロン)」は必須
処理の前にはインデントと呼ばれる半角スペース(基本的には4つ)を入れる
実際のプログラミングではIDE(統合開発環境)やエディタなどのツールにインデントやコロンの有無をチェックするサポート機能がある場合も多いため、活用するのが良いでしょう。
Pythonでの種類(if, elif, else)
Pythonで条件分岐を書く際には以下の3種類の文を使い分けることが重要です。
if:if文の作成時に必須の要素(これのコードがないと以下の2つは使用できない)
elif:ifの条件式を満たさず、他の条件式を満たすかを判定する場合に使用
else:すべての条件式(if, elifのすべて)に当てはまらない場合の分岐に使用
余談ではありますが、「if」と「else」は別のプログラミング言語でも使用する文字は基本同じです。しかし、「elif」に関してはプログラミング言語によって文字が変わることも多いので、覚えておくと良いでしょう。
それぞれを使用した構文については後から詳しく紹介します。
2.if文の基本的な条件分岐
if文での分岐は基本的に条件式を満たすかどうか(真偽:True, False)の判定です。
そのため、基本的な条件式の設定方法は以下の2つです。
真偽値(True, False)が入っている変数を使用
flag = True if flag: print('フラグはTrueです。') |
比較演算子を使用して変数の値を判定
num = 10 if num == 10: print('数値は10です。') |
この方法と各種キーワード(if, elif, else)を使用することで分岐処理を作成していきます。
比較演算子を使用した条件式
基本の使い方を学ぶにあたって、はじめに知っておくべきなのが「比較演算子」を使用した条件式です。
比較演算子は比較方法に応じて、以下のような種類があります。
論理記号(比較演算子) | 条件 | 具体例 |
---|---|---|
== | 等しい | # numの値が10と等しいかの判定 if num == 10:
if s == 'Python': |
!= | 等しくない | # numの値が10と等しくないかの判定 if num != 10: # 文字列のチェックも可 if s != 'Python': |
>= | 以上 | # numの値が10以上かの判定 if num >= 10: |
> | より大きい(超) | # numの値が10超かの判定 if num > 10: |
<= | 以下 | # numの値が10以下かの判定 if num <= 10: |
< | より小さい(未満) | # numの値が10未満かの判定 if num < 10: |
基本的には上記の比較演算子で比較可能であれば、数値や文字列などのデータ型に制限はなく、これらと後述の「else」「elif」を組み合わせて使用するのが基本です。
else:もし○○でない△△場合
前述でも少し触れたとおり、他(if, elif)の条件式を満たさない場合の処理を追加したいときに使用するのが「else」になります。
基本構文は以下の通りです。
if 条件式: 処理1 else: 処理2 |
処理内容としては以下のようになります。
「条件式」を満たす(真:True)の場合は「処理1」を実行
「条件式」を満たさない(偽:False)の場合は「処理2」を実行
上記の構文を書く際に抑えるポイントは以下の通りです。
elseには条件式を記載しない
単独では記載しない
それでは実際に以下のような条件でのコード例を見ていきましょう。
条件1:10時までに起きた場合 朝食と昼食を分けて食べる
朝食と昼食は分けずに食べる |
# 起床時間の設定 wake_up_time = 11
if wake_up_time <= 10: print('朝食と昼食を分けて食べる') else: print('朝食と昼食は分けずに食べる')
朝食と昼食は分けずに食べる |
例では起床時間が11時のため、「if」の処理をスキップして「else」の処理を行っています。
一応、if文が実行される例も見てみましょう。
# 起床時間の設定 wake_up_time = 8
if wake_up_time <= 10: print('朝食と昼食を分けて食べる') else: print('朝食と昼食は分けずに食べる')
朝食と昼食を分けて食べる |
このように「if」「else」を使えば、分岐処理のパターンの追加が可能です。
elif:もし○○でなく○○である場合
以下のように条件を複数用意したいことがあると思います。このような際に使用するのが「elif」です。
条件1:7時に起きた場合 朝食を食べて、運動する
朝食と昼食を分けて食べ、運動はしない
朝食と昼食は分けずに食べ、運動はしない |
基本構文は以下のようになります。
if 条件式1: 処理1 elif 条件式2: 処理2 else: 処理3 |
処理内容としては以下のようになります。
「条件式1」を満たす(真:True)の場合は「処理1」を実行
「条件式2」を満たす(真:True)の場合は「処理2」を実行
「条件式1」「条件式2」を満たさない(偽:False)の場合は「処理3」を実行
上記の構文を書く際に抑えるポイントは以下の通りです。
ifとelseの間に記載すること(ifの前やelseの後ではエラーになる)
ifとは別の条件式を使用すること
それでは前述の条件でのコード例を見ていきましょう。
# 起床時間の設定 wake_up_time = 8
if wake_up_time == 7: print('朝食を食べて、運動する') elif wake_up_time <= 10: print('朝食と昼食を分けて食べ、運動はしない') else: print('朝食と昼食は分けずに食べ、運動はしない')
朝食と昼食を分けて食べ、運動はしない |
上記のように8時に起きた場合は「if」の条件を満たさないが、「elif」の条件を満たしているため、elifの処理が実行されます。
また、「elif」には記載する数に制限はありませんし、「else」をつけなくても使用可能です。そのため、以下のような条件でも記載が可能になります。
例1)「elif」複数の場合
条件1:7時に起きた場合 朝食を食べて、運動する
朝食と昼食を分けて食べ、運動はしない
朝食と昼食は食べず軽食のみで、運動はする
夕食まで何も食べず、運動もしない |
# 起床時間の設定 wake_up_time = 13
if wake_up_time == 7: print('朝食を食べて、運動する') elif wake_up_time <= 10: print('朝食と昼食を分けて食べ、運動はしない') elif wake_up_time <= 14: print('朝食と昼食は食べず軽食のみで、運動はする') else: print('夕食まで何も食べず、運動もしない')
朝食と昼食は食べず軽食のみで、運動はする |
例2)「else」省略の場合
条件1:7時に起きた場合 朝食を食べて、運動する
朝食と昼食を分けて食べ、運動はしない
朝食と昼食は食べず軽食のみで、運動はする |
# 起床時間の設定 wake_up_time = 15
if wake_up_time == 7: print('朝食を食べて、運動する') elif wake_up_time <= 10: print('朝食と昼食を分けて食べ、運動はしない') elif wake_up_time <= 14: print('朝食と昼食は食べず軽食のみで、運動はする')
(出力なし) |
このように「elif」を使用することで複数の分岐を作ることができ、分岐処理を最適化することも可能です。
if文の注意点
if文を作成する際に注意することには以下のようなポイントがあります。
「if」「elif」「else」の記述
ルールは3つ
1.「if」が最初で「else」が最後
2.「elif」は「if」と「else」の間
3.「else」は複数記載しない(「if」1つに「else」は1つ、elifは制限なし)
条件式には基本的に真偽値
基本の使い方としては条件式で使用するのは真偽値(True, False)
※後述で真偽値以外での判定については紹介
以上のポイントを押さえておけば、エラーになることはないため、エラー発生時にはこちらを思い出して確認しましょう。
関連記事
【Python初心者向け】Pythonで作れるものや入門用のサンプルコード、おすすめの参考書を紹介!
Pythonとは?コードの具体例など人気プログラミング言語を初心者にわかりやすく解説
3.if文で論理演算子を使用した複数条件分岐
処理の条件分岐を考えるときに「○○かつ△△の場合」や「○○または△△の場合」、「○○でない場合」などといった複数の条件や否定でチェックしたいということがあると思います。
その時に使用するのが「論理演算子」です。
論理演算子には以下のようなものがあります。
論理演算子 | 使い方 | 意味 |
---|---|---|
and(論理積) | 条件式A and 条件式B | 条件式A、Bの両方を満たす場合はTrue、それ以外はFalse |
or(論理和) | 条件式A or 条件式B | 条件式A、Bのどちらかを満たす場合はTrue、それ以外はFalse |
not(否定) | not 条件式 | 条件式を満たす場合はFalse、満たさない場合はTrue |
論理演算子は複数の条件式を組み合わせるためのもので、「かつ(and)」「または(or)」「ではない(not)」というように使い分けるイメージです。
ここからはそれぞれの使用例を見ていきましょう。
and(論理積)
「and(論理積)」は「○○かつ△△」という判定の場合に使用します。
基本構文は以下の通りです。
if 条件式1 and 条件式2: 両方を満たす(True)場合の処理 |
andより左の条件式1とandより右の条件式2の両方がTrue(真)であれば、全体の評価がTrue(真)というイメージになります。
具体的な例をもとに確認していきましょう。
例)「年齢が12歳以上かつ20歳未満」という判定を行う場合
# 年齢を設定 age = 14
if age >= 12 and age < 20: print('True') else: print('False')
True |
このコードでは以下のような処理の流れです。
ageに14を代入
条件式1(age >= 12)はage = 14のため、True
条件式2(age < 20)はage = 14のため、True
条件式1、2の両方を満たすため、ifの処理(print('True'))を実行
else処理(print('False'))はifが実行されたため、スキップ
もし、ageに代入される値が30であれば、上記の3の結果がFalseになります。その場合、4の処理(print('True'))は実行されず、5の処理(print('False'))を実行するため、実行結果は「False」にかわるのです。
or(論理和)
「or(論理和)」は「○○または△△」という判定の場合に使用します。
基本構文は以下の通りです。
if 条件式1 or 条件式2: どちらかを満たす(True)場合の処理 |
orは条件式のどちらかがTrue(真)であれば、全体の評価がTrue(真)というイメージになります。
具体的な例をもとに確認していきましょう。
例)「年齢が12歳以下または60歳以上」という判定を行う場合
# 年齢を設定 age = 10
if age <= 12 orr age >= 60: print('True') else: print('False')
True |
このコードでは以下のような処理の流れです。
ageに10を代入
条件式1(age <= 12)はage = 10のため、True
条件式2(age >= 60)はage = 10のため、False
条件式1は満たすため、ifの処理(print('True'))を実行
else処理(print('False'))はifが実行されたため、スキップ
もし、ageに70が代入された場合には上記の2はFalseになりますが、3がTrueになるため、実行結果は変わりません。
ageに15が代入された場合には2と3の両方がFalseのため、4の処理(print('True'))は実行されず、5の処理(print('False'))を実行するため、実行結果は「False」になります。
not(否定)
「not(否定)」は「○○出ない」という判定の場合に使用します。
基本構文は以下の通りです。
if not 条件式: 条件式を満たさない(False)場合の処理 |
具体的な例をもとに確認していきましょう。
例)「年齢が20歳以上でない」という判定を行う場合
# 年齢を設定 age = 14
if not age >= 20: print('True') else: print('False')
True |
このコードでは以下のような処理の流れです。
ageに14を代入
条件式(age >= 20)はage = 14のため、False
条件式を満たさないため、ifの処理(print('True'))を実行
else処理(print('False'))はifが実行されたため、スキップ
もし、ageに代入される値が30であれば、上記の3の結果がTrueになり、3の処理(print('True'))は実行されず、4の処理(print('False'))を実行するため、実行結果は「False」に変わります。
関連記事
【Python入門】print関数の使い方と改行なし・変数出力・f文字列など応用テクニック
4.if文の応用テクニック
複数の条件式を1行で書ける三項演算子の使い方
Pythonには三項演算子という記述方式があり、これによって「if」「elif」「else」を1行で記載することが可能です。
基本構文は以下のようになります。
条件を満たす場合の処理 if 条件式 else 条件式を満たさない場合の処理 |
これだけだとわかりにくいので具体的な変換例を見ていきましょう。
if wake_up_time <= 10: print('朝食と昼食を分けて食べる') else: print('朝食と昼食は分けずに食べる') |
上記コードを三項演算子で記載すると以下の通りです。
print('朝食と昼食を分けて食べる') if wake_up_time <= 10 else print('朝食と昼食は分けずに食べる') |
また、elifを使用する場合は以下のようになります。
if wake_up_time == 7: print('朝食を食べて、運動する') elif wake_up_time <= 10: print('朝食と昼食を分けて食べ、運動はしない') else: print('朝食と昼食は分けずに食べ、運動はしない') |
print('朝食を食べて、運動する') if wake_up_time == 7 else print('朝食と昼食を分けて食べ、運動はしない') if wake_up_time <= 10 else print('朝食と昼食は分けずに食べ、運動はしない') |
三項演算子での記述では「elif」は使用できないため、「else」の部分にさらに分岐を記載するような書き方になるのが特徴です。
3つの分岐程度や論理演算子などを使用した複雑なif文でなければ、三項演算子でコードの最適化にも役立つでしょう。しかし、複雑な条件分岐では「可読性」や「メンテナンス性」などの低下にもつながるため注意が必要です。
入れ子(ネスト)構造のif文
if文の実装において以下のような条件にしたい場合があると思います。
条件1:7時に起きた時、空腹の場合 食事をとる
食事をとらない
何もしない |
こういった条件のうち1つが共通している条件を設定したい場合には入れ子(ネスト)構造のif文が有効です。
入れ子構造のif文とは以下のようなものを指します。
if 条件式1: if 条件式2: 処理1 else: 処理2 else: 処理3 |
処理内容としては以下の通りです。
「条件式1」と「条件式2」の両方を満たす(真:True)の場合は「処理1」を実行
「条件式1」を満たす(真:True)が「条件式」2を満たさない(偽:False)場合は「処理2」を実行
「条件式1」を満たさない(偽:False)の場合は「処理3」を実行
具体的に先ほどの条件で、見ていきましょう。
# 起床時間の設定 wake_up_time = 7
hungry = True
if wake_up_time == 7: if hungry: print('食事をとる') else: print('食事をとらない') else: print('何もしない')
食事をとる |
片方の条件が同じで、追加の条件で分岐したいというような処理はPythonに限らずプログラミングにおいてはよくあることです。しかし、入れ子構造は深くすればするほど、可読性が損なわれてしまうため、注意して活用しましょう。
真偽値以外の使い方
最後におまけのような要素になりますが、Pythonのif文においては真偽値以外でも判定をさせることが可能です。
ここではその一部を紹介していきます。
【数値】
0はFalse
0以外はTrue
【文字列】
空文字はFalse
空文字以外はTrue
【その他】
変数の値がNoneの場合はFalse
変数の値がNoneでない場合、True
Pythonでのシステムを作成する際に変数の扱い方が複雑にあることもあるため、そういった際にうまく活用できると良いでしょう。
関連記事
JavaとPythonの違いとは?文法比較などエンジニア初心者から現役開発者向けに解説
Python3エンジニア認定基礎試験とは?合格率や難易度、メリット・デメリット、対策方法について解説
5.まとめ
ここまでPythonのif文の基本と応用テクニックについて紹介してきました。
if文はPythonに限らずプログラミングにとっては欠かせない構文になります。紹介した内容を活用できるようになれば、よりシンプルに見やすいコードにすることも可能です。
しっかりと理解し、実践してコードの可読性やメンテナンス性を上げて、最適化を目指しましょう。
本記事が皆様にとって少しでもお役に立てますと幸いです。
「フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。
開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。
単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。