こちらの記事ではif文を利用して条件分岐を行うための書き方を学んでいきます。
ここまでの記事では主に上から順に実行されていく形で処理が進んでいました。
条件分岐を利用することで、XXXだったら実行する、△△△だったら処理をするような場合分けができるようになります。
本処理を学ぶことで出来ることが大きく広がります。

他の言語でも利用する知識になるため、この記事を通して確実に学ぶようにしましょう!

目次
条件分岐処理の考え方
条件分岐処理は以下のように、ある条件に従って条件ごとの処理を行うことが可能です。
以下図の例では、条件部分の四角形で条件判断を行い、それぞれの処理に進むように指示します。
条件Xの処理では今までと同じようにprint関数などの処理を行います。

早速コード例から理解を進めていきましょう。
if文の書き方
if文の基本

何度か実行して入力を求められる部分では100とそれ以外の数値を試してみましょう
# input関数で入力値を受け取り
num = input("数字を入力してください:")
# 数値に変換
num = int(num)
# if文で比較して100の場合のみprint処理を実行
if num == 100:
print("入力された数字は100です")

ちなみにif文の中の=(イコール)が2つあるのは正しい?

こちらが主な比較演算子の種類です。
演算子 | 使い方 |
---|---|
== | 左辺と右辺が等しい場合 |
!= | 左辺と右辺が等しくない場合 |
> | 左辺のほうが大きい場合 |
>= | 左辺が右辺以上の場合 |
< | 右辺のほうが大きい場合 |
<= | 右辺が左辺以上の場合 |
※オブジェクト比較の演算子もありますが今回は省略しています
文字列の判定は上2つ、数値の判定は全てに使われます。いずれもよく使う演算子なので覚えておきましょう。
ちなみにコード上ではイコールは代入を指す記号として使われるため、if文などの書き方では、他言語でも上記の通り2つ連続して表現することが多いです。

if文の次の行は頭に空白(スペース)が空いています。こちらをインデントと呼びます。
この場合のインデントはif文の中で処理する対象を表現することが可能です。以下例の通り、2行を処理することもできます。
num = input("数字を入力してください:")
# 100の場合はprint行が2つ実行されます。100以外の場合は何も実行されません
if int(num) == 100:
print("入力された数字は100です")
print("処理を終了します")
※上記例の通り、if文内で数値変換して比較することも可能です


以前紹介したとおり、コーディングルールに記載されていることが多いため習うようにしましょう
独学時点であれば半角スペース4つとするのが無難です
スペースの数に決まりはないのですが、全角スペースを使ったり、スペースの数が他の行とズレているとエラーになるので注意しましょう。
特に全角スペースの罠は初心者の方は引っかかることが多いです。

if-else文の書き方

num = input("数字を入力してください:")
# 100以外の場合はelseの処理が実行されます
if int(num) == 100:
print("入力された数字は100です")
else:
print("入力された数字は100以外です")


num = input("数字を入力してください:")
# 100を入力すると両方のprint処理が実行されてしまう
if int(num) == 100:
print("入力された数字は100です")
print("入力された数字は100以外です")
複数の分岐処理を記述する

num = input("数字を入力してください:")
# 上から順にifの条件判定が行われます
if int(num) >= 100:
print("入力された数字は100以上です")
elif int(num) >= 50:
print("入力された数字は50以上です")
elif int(num) >= 10:
print("入力された数字は10以上です")
else:
print("入力された数字は10未満、または数字ではありません")
2個目以降のif処理はelifと表現します。ifは最初の1つのみで、以降のelifは何度でも利用可能です。
上から順に実行されて、いずれの条件にも合致しなかった場合にelse処理に入ります。



チェック用のメソッドや関数の結果で判定する



num = input("数字を入力してください:")
# 数値かどうかのチェックを行い、結果をrstに入れる
rst = num.isdigit()
# 数値判定を最初に行い、数値である場合は中身の判定に進みます
if rst == False:
print("入力された値は数字ではありません")
elif int(num) >= 100:
print("入力された数字は100以上です")
elif int(num) >= 10:
print("入力された数字は10以上です")
else:
print("入力された数字は10未満、または数字ではありません")
まずはnumはインプット直後は文字列型です。そのためnumに対してisdigitメソッドを実行して結果をrst変数に格納します。(4行目)
この時にisdigitの結果に応じてTrueまたはFalseが返却されます。この2つが定義された型はブール型と呼ばれ、各種判定で使われる型です。
続けて、if文の最初にrstをFalseとチェックして合致したら(つまり数値でなかったら)専用のprint処理を行います。
本処理を最初に実施しないと数値以外をint関数で処理するとエラーになるためです。
if文は今回の例だと、最初の条件に合致すると以降の処理を実行しないためです。
※あまり良くないプログラムで、本来は数値チェックをしてFalseの場合はプログラム終了するほうが望ましいです。分かりやすくするために今回の例としています。


複数の条件を組み合わせる
最後にこちらも良く使う複数の条件を組み合わせて判定する方法も紹介します。
num = input("数字を入力してください:")
# 100以上または10以下の場合のみ、処理されます
if int(num) >= 100 or int(num) <= 10:
print("入力された数字は100以上または10以下です")
else:
print("入力された数字は100以上または10以下ではありません")
※分かりやすくするために最低限の処理にしています
orで繋げる形で2つの条件を書いています。直感的に読み取れるかもしれませんが、numが100以上、または10以下だったらif条件に合致=処理を実行する、という意味です。
他にもandとnotがあります。この3点はブール演算子と呼ばれています。
まずはandのサンプルから。以下のサンプルで100を入力するとprint処理されます。
num = input("数字を入力してください:")
# 2つ目の条件で利用する条件用の変数
chk = True
# 100以上かつchkがTrueの場合のみ、処理されます
if int(num) >= 100 and chk == True:
print("入力された数字は100以上でchkがTrueです")
次に4行目のchkをFalseに書き換えて試してみましょう。100以上の数値を入力してもprint処理が実施されません。
これはnumが100以上、chkがTrueの両方の条件が合致しないと処理をしないという書き方です。
最後にnotです。こちらも英語の意味通り、異なる場合という意味になります。以下サンプルです。
num = input("数字を入力してください:")
# 100以上"でなければ"処理を実行する
if not int(num) >= 100:
print("入力された数字は100以上ではありません")


具体的な書き方が分からなくなったら、またこのページを参照する形で少しづつ覚えていきましょう!
python入門~if文を使った条件分岐
今回はif文の様々なパターンを紹介しました。今までの記事に比べるとボリュームが多かったですが、いずれも実際の業務で利用する書き方であり、ほぼ網羅した形になっています。
次の記事で紹介する繰り返し処理と合わせることで様々な処理が実現できるようになります。
自分なりにサンプルコードを書き換えながら、確実にマスターしておきましょう。
補足~本ページQ&A
if文の中にif文


num = input("数字を入力してください:")
# 数値かどうかのチェックを行い、結果をrstに入れる
rst = num.isdigit()
# 数値判定を最初に行い、数値である場合は中身の判定に進みます
if rst == True:
if int(num) >= 100:
print("入力された数字は100以上です")
elif int(num) >= 10:
print("入力された数字は10以上です")
else:
print("入力された数字は10未満、または数字ではありません")
else:
print("入力された値は数字ではありません")


極力、階層を少なくするように書くことが望ましいです
ブール型のTrueとの比較は省略できる

省略する書き方のほうが一般的なので慣れてくると切り替えていくようにしましょう
num = input("数字を入力してください:")
# 100以外の場合はelseの処理が実行されます
if num.isdigit():
print("数字が入力されました")
num = input("数字を入力してください:")
# 100以外の場合はelseの処理が実行されます
if not num.isdigit():
print("数字以外が入力されました")
isdigitメソッドではマイナス値が処理できない

きっちり対応しようとすると、そこそこ大変になります。。