if文は「もしAならB、それ以外ならCを実行する」といったような「条件分岐」をするための構文です。多くのプログラミング言語同様Pythonにもこのif文があり、様々なプロダクトを作る上で必須となる構文です。
今回は「ifはどうやって使うの?」「何が出来るの?」「ifを使うときの注意点を知りたい」といったPython入門者の方へ、ifの使い方を解説します。
YouTubeも公開していますので、動画や音声で聞きたい方はぜひご覧ください。
Pythonにおけるifの基本的な書き方
Pythonで使われる比較演算子は以下の通り。それぞれの条件に当てはまると「true」の処理を行います。
比較演算子 |
例 |
内容(結果) |
---|---|---|
== |
A == B |
AはBと等しい |
!= |
A != B |
AはBと異なる(等しくない) |
is |
A is B |
AはBと同じ値である |
is not |
A is not B |
AはBと値が異なる |
> |
A > B |
AはBよりも大きい |
< |
A < B |
AはBよりも小さい |
>= |
A >= b |
AはB以上である |
<= |
A <= b |
AはB以下である |
in |
A in B |
AはBに含まれている |
not in |
A not in B |
AはBに含まれない |
Pythonのif文も他の言語同様、「Aかどうかを判断し、真(true)ならばBを実行、偽(false)ならCを実行しなさい」という処理を行うのが基本的な形で、一言で言えば結果がTrueかFalseかでその後の処理を分岐させます。では書き方をサンプルコードと一緒に見ていきましょう。
条件に合う処理(if)
まずは実際にifで条件分岐させてみましょう。
[サンプルコード]
a = 2 + 2
b = 2 * 2
if a == b:
print("aとbは同じ")
print("処理終了")
[出力結果]
aとbは同じ
print(“処理終了”)
aとbにそれぞれ2 + 2、2 * 2をさせ、結果を代入します。両方とも4になるので、a == bはTrueになり、if内のprintが実行され、結果に表示されます。
if内の命令はインデントして書く必要があります。インデントを忘れると構文エラーになります。
if文を抜ける場合はインデントを終了します。最後の行のprintはインデントされていないので、その手前の行でifは終了しています。
[構文]
if 条件式:
# インデント開始(空白)
命令
命令
命令
# インデント終了
インデントは全て同じ分だけ字下げするなら、何文字でもかまいません。慣習として、空白2文字か4文字が使われています。
条件に合う場合と合わない場合の処理(if 〜 else)
さて、ここまでは「AならB」でした。ここからはより条件分岐らしい「AならB、それ以外はC」という場合を見ていきましょう。
こういった条件分岐をする場合は、「else」を使います。
[サンプルコード]
a = 2 + 2
b = 2 / 2 #変更
if a == b:
print("aとbは同じ")
else:
print("aとbは異なる")
print("処理終了")
[出力結果]
aとbは異なる
処理終了
ifの後にelseを追加しました。elseの後の処理も同じようにインデントします。ifの後の命令と、elseの後の命令のインデントは同じ文字数でなければなりません。
[構文]
if 条件式:
命令a1
命令a2
else:
命令b1
命令b2
# インデント終了(※インデント文字数は全て統一!)
複数(3つ以上)の条件分岐(if 〜 elif 〜 else)
最後に3つ以上の条件分岐を見ていきましょう。3つ以上の条件分岐をする場合は「elif」を使います。
では例を見てみましょう。
[サンプルコード]
score = 55
if score >= 80:
result = "A"
elif score >= 60:
result = "B"
elif score >= 40:
result = "C"
else:
result = "D"
print(str(score) + "点:" + str(result) + "クラス")
[出力結果]
55点:Cクラス
上記は「scoreの値に応じて、80点以上ならA、60点以上ならBと、scoreによって判定結果を振り分ける」プログラムです。elifはifとelseと違い、複数個設定できるので、3つ以上の条件分岐が可能です。ifの条件、elifの条件両方に当たらない場合は、elseの結果となります。
今回はscoreの値が55なので、2つ目のelifの条件と合い、クラスCが結果として返ってきました。
ifの応用的な使い方
ここからはもう少し踏み込んだifの使い方を見ていきましょう。
ifのネスト(入れ子)
ここではifの中にifを書く「ネスト」について見ていきましょう。
ちなみにネストは「入れ子」とも呼びます。次のプログラムは、配達をお願いする荷物が配達可能か、可能なら配達料金を求めるサンプルプログラムです。
weight = 20 #荷物の重さ(kg)
weight_limit = 25 #配達可能な荷物の最大重量
size = 155 #荷物のサイズ
price = None
if (weight <= weight_limit): #(1)20 <= 25なのでTrue
if (size <= 60): #(2)155 <= 60なのでFalse
price = 810
elif (size <= 120): #(3)155 <= 120なのでこれもFalse
price = 1530
elif (size <= 170): #(4)155 <= 170なのでTrue
price = 2340 #(5)priceに2340を代入
else:
print("配達できません(サイズオーバー)")
else:
print("配達できません(重量オーバー)")
if (price != None): #(6)priceは2340なのでTrue
print("配達料は" + str(price) + "円です") #(7)配達料を出力
[出力結果]
配達料は2340円です
ネストすると途端に複雑になりますが、一つ一つちゃんと追っていけば、どの分岐に入っていったかがわかります。
まず1〜3行目で荷物の大きさ、荷物のサイズ、最大重量を初期化しています。次にpriceをNoneで初期化しています。Noneは「何もない」ことを指す言葉です。
priceには配達料金が代入されます。必要な変数の初期化が終わったら、条件分岐に入ります。
まずは(1)最大重量を超えていないかをチェックします。重量が超えていたら重量オーバーですが、weightはweight_limit以下なので、if内の処理が実行されます。
次にサイズチェックです。サイズは3つに分かれており、どれにも当てはまらない場合はサイズオーバーとなります。今回sizeは155なので、size <= 170に合致します。sizeが170以下の場合2340円なので、priceに2340を代入し、最初のifはここで終了します。
次に下のifに移ります。この時点でpriceには2340が代入されているので、結果はTrueになります(!=は否定の条件式)
最後にif内のprintが実行され、配達料金を出力しています。
上記の例では2340円でしたが、weightやsizeを変えることで結果が変わるので、確認してみてください。
論理演算子
ネストを使って、ifのより高度な使い方を学習しました。しかし、ネストするとどうしてもコードが複雑になりがちです。
ここでは、論理演算子の「and」と「or」を使って、ifを簡略化してみましょう。
andの使い方
andは「AかつBならTrue、それ以外はFalse」という条件の場合に使う論理演算子です。
[サンプルコード]
math_score = 89
english_score = 45
if math_score >= 60 and english_score >= 60:
print("合格!")
else:
print("不合格")
[出力結果]
不合格
これは「数学と英語の得点が両方60点以上なら合格、それ以下なら不合格と出力する」プログラムです。数学は達成していますが、英語が合格点に足りていないので、不合格となっています。
orの使い方
orは「AまたはBならTrue、それ以外はFalse」という条件の場合に使う論理演算子です。
[サンプルコード]
math_score = 89
english_score = 45
if math_score >= 60 or english_score >= 60: #andをorに変える
print("合格!")
else:
print("不合格")
[出力結果]
合格!
先ほどのプログラムのandをorに変えています。今回も同じく英語が60点に達していませんが、数学が合格ラインに到達しているので、結果は「合格!」となりました。
なおPythonの論理演算子は、「and」「or」の他に「not(AがTrueならFalse、AがFalseならTrue)」があります。
条件式を簡略化する
最後に条件式を簡略する方法をみていきましょう。
これは他の言語では見ない、Pythonの特徴的な部分です。次のコードはandを簡略化して記述しています。
[サンプルコード]
a = 10
if 5 <= a <= 10:
print("aは5以上10以下です")
[出力結果]
aは5以上10以下です
aが5以上10以下であれば結果を出力するプログラムです。
Pythonでは、このように条件式を簡略化して書けます。
if 〜 elseを1行で書く
今度はif 〜 elseを1行で書いてみましょう。
ある変数に条件分岐の結果を代入する場合に使います。
[サンプルコード]
a = 5
b = 6
bigger = b if a < b else a
print (str(a) + "と" + str(b) + "では" + str(bigger) + "の方が大きい")
[出力結果]
5と6では6の方が大きい
重要なのは3行目の「b if a < b else a」です。これは真ん中の条件式(a < b)がTrueだった場合はaを、そうでない場合はbを返します。返された結果はそのまま変数biggerに代入され、printで出力されています。
一見便利そうに見えますが、真ん中の条件式が複雑になりすぎると、かえってソースコードが見にくくなりがちです。
使う場合はコードが見にくくならないか、注意を払う必要があります。
Pythonのifを習得しよう
本稿ではPythonにおけるif文の使い方について解説しました。if文はあらゆるプログラミングで頻繁に使われる構文なので、サンプルコードを参考に色々な条件を自分で組んでみてください。