Python入門

条件分岐(if文)

~python入門~条件分岐(if)

if文は、「もしAならB、それ以外ならCを実行する」といったような「条件分岐」をするための構文です。

今回は「ifはどうやって使うの?」「ifを使うときの注意点を知りたい」といった方へ、ifの使い方を解説します。

YouTubeも公開していますので、動画や音声で聞きたい方はぜひご覧ください。

【Python入門】繰り返し処理(if文)

ifの基本的な使い方

条件に合う処理(if)

ではifの使い方を見ていきましょう。ifの条件は条件を論理式を使って記述し、結果がTrueかFalseかでその後の処理を分岐させます。

まずは実際に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を簡略化して記述しています。

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で出力されています。

一見便利そうに見えますが、真ん中の条件式が複雑になりすぎると、かえってソースコードが見にくくなりがちです。

使う場合はコードが見にくくならないか、注意を払う必要があります。

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