【Python基礎】知っておくべき if 文の使い方と実例集

Python入門
この記事は約8分で読めます。

Pythonをこれから始めようとする人、又は始めたばかりの人に向けて、if 文の使い方を解説します。

前半はエッセンスだけまとめていますので、忘れた部分を思い出すためにお使いいただけます。

後半はif 文について詳しく解説していますので、if 文について曖昧な方は、是非最後までお読みください。

if 文については他のサイトでも解説されていますが、具体的な応用事例はあまり紹介されていないようなので、この記事では、その辺についても触れています。

if文の基本形

if文は条件式が成り立つ(True)か成り立たないか(False)によって、処理の分岐を分けるために利用します。

Pythonの if文は以下のような構造になります。

elif はいくつも連ねて書く事が可能で、この場合は if 又は elif で指定された条件式の結果が、最初にTrueになった時の処理のみが実行されます。

if 文は if 単体か if ~ else の組み合わせで利用することが多く、 elif の使用頻度はそれほど多くありません。

それは、条件式を何段も使うようなケースが限られていることと、別の書き方でも同じ処理が出来るからです。

条件式で使える演算子

Python では、条件式で次の比較演算子が利用可能です。

比較演算子意味
a == ba と b は等しい
a != ba と b は異なる
a < ba は b より小さい(a は b 未満である)
a > ba は b より大きい
a <= ba は b 以下
a >= ba が b 以上である
a is ba が b と等しい(a は b である)
a is not ba とb は異なる(a は b ではない)
a in ba が b に含まれている
a not in ba が b に含まれていない

複数の条件式を組み合わせたい場合は、次の論理演算子を用います。

論理演算子意味
c1  and c2c1 と c2の両方が成り立つ
c1 or c2c1 と c2 のどちらか、又は両方が成り立つ
not c1c1 を否定 (c1 がTrueの場合はFalseを、Falseの場合はTrueを返す)

if 文のサンプルコード

それでは、キーボードから入力値された値が、閾値より大きいか否かを if 文で判定し、それに応じたメッセージを表示するサンプルプログラムを例に、if 文の具体的なソースコードを解説してきます。

サンプルプログラムの基本的な処理手順は次の通りです。

if 文単独

if 文だけで用いる場合は、何らかの初期値に対して条件文で変更を加えるようなケースです。

サンプルでは、「入力された値は50より大きい」という初期値が msg に登録されており、閾値(50)を超える場合は msgの内容を「入力された値は50以下である」に変更するような使い方をしています。

if ~ else 文

if ~ else を使って、閾値(50)以下とそうでない場合のメッセージを分ける例です。

おそらく、このパターンが一番多く使われていると思います。

if ~ else 文(複数の条件式)

次は、単一の閾値ではなく、範囲を示す2つの閾値(20と50) を使って、入力された値が、20~50 の範囲内に収まっているか否かによってメッセージを分る例です。

20以上であるか否かは val >= 20 、50以下であるか否かは val <= 50 と記述できます。

従って、20以上~50以下の範囲指定は and を使って val >= 20 and val <= 50 と記述出来ます。

サンプルでは 20 <= val and val <= 50 と記述していますが、この書き方の方が直感的に分かりやすいからで、実際はどちらでも構いません。

if ~ elif ~ else 文

では先ほどのプログラムを elif を使って書きてみます。

elif は上から順番に条件判断が行われ、判断結果が True になった段階で if 文は終了します。

今回は、上から順番に除外したい条件を記述し、最後まですり抜けた場合に入力された値が範囲内を示すメッセージ「入力された値は20~50の間です」を表示するようにしています。

if 文のネスト(入れ子)

if 文の中に if文を入れる、いわゆるネスト(入れ子)することも可能です。

入れ子はいくつでも深くすることは可能ですが、あまり深くしすぎるとプログラムが読みにくくなるので、ほどほどにしましょう。

先ほどの if~elif~else を使った分岐のプログラムを if文をネスト(入れ子)にして書き直すと、以下の様になります。

どんな時にどの if 文を使うのか

以上の通り、同じ条件判断をさせる場合でも、条件文を複数使う方法、if~elif を使う方法、if文のネストを使う方法などバリエーションがあることが分かるかと思います。

では、どんな時にどんな書き方をすればよいのでしょう?

答えは・・・ありません。

強いて言うなら、プログラミングする人が「この書き方の方が第三者に分かりやすいと思う」書き方で記述すれば良いかと思います。

ただ、分かりやすさの目安として

  • 複雑な条件式(and や or を多用するような場合)は書かない
  • elif で使う条件式は、極力単純(a==b 、a > b など)なものにする
  • ネストは深くしない(2~3階層程度にとどめる)

は心がけておくべきかと思います。

あくまで参考ですが、条件文に応じて値を返す関数を作る場合、elif の代わりに下記の様に単独のif文とreturn を組み合わせた書き方をする場合もあります。

自分が分かりやすいコードと他人が分かりやすいコードは違いますが、少なくとも分かりやすいコードを書こうと意識しないと、いつまでも良いコードは書けませんので、是非分かりやすいコードを心がけてください。

if文による空の判定

プログラムの中で使っている変数の中身が空かどうかを、 if 文でチェックしたくなることがよくあります。

例えば、a という変数と b という変数を掛け算する場合、a が空だと計算時にエラーとなってしまうからです。

Pythonには int や float 、リストやタプルなど複数のデータ型が用意されていますが、それぞれ空の判定方法が異なりますので、ここで整理しておきたいと思います。

変数の方条件式
int,float,str,classなどa is None
a == None
リストa == []
リスト、セットa == {}
タプルa == ()

Python は値を入れた段階で、その変数の型が決まります。

1つの変数に対して、プログラムの中で異なる型のデータを複数回代入するような場合は、どの型で判定すべきか注意が必要です。

もし変数に代入されている値の型が分からない場合は、想定される型の空判定をor を使って羅列します。

3項演算子

if 文はどうしても2行以上にまたがってしまいますが、以下のような書き方をすることで1行にすることが可能です。

この様に1行の中に if ~ else を記述したものを3項演算子と呼んでおり、条件判断による分岐処理を1行で記述できます。

3項演算子は基本的に条件分岐に応じて値を返すだけなので、通常は結果を変数に代入するような記述になります。

あくまでも条件式が成り立つか(True)成り立たないか(False)の2択でしかありません。

ただ、3項演算子をネストすることで、elif のような記述は可能です。

if 文のTips

何らかの入力値から別の値に変換する場合(いわゆるコード変換)は次の様に書く事が出来ます。

タプルやリストなど配列上のデータに対して、その中に値が含まれているかは in を使って次のように記述出来ます。

まとめ

今回はPython の勉強をこれから始めようとしている人、または始めている人向けに、if文の基本と使い方について解説しました。

if 文と言っても色々な書き方があり、プログラムの内容やプログラミング者の好みにもよるところが多く、「この場合はこの記述」と言った方程式はありません。

しかし、分かりやすいように書くことを心がけることは大切です。

特にif 文は書き手によって読み易さが大きく変わりますので、あまり複雑な条件式にならないよう、ネストは深くならないよう、注意しながらプログラミングして頂ければと思います。

今回の記事が皆様のお役に立てれば幸いです。

タイトルとURLをコピーしました