python

python

python入門~if文を使った条件分岐 | 独学プログラミング

こちらの記事ではif文を利用して条件分岐を行うための書き方を学んでいきます。

ここまでの記事では主に上から順に実行されていく形で処理が進んでいました。

条件分岐を利用することで、XXXだったら実行する、△△△だったら処理をするような場合分けができるようになります。

本処理を学ぶことで出来ることが大きく広がります。

条件分岐処理は様々な言語で欠かせない処理の一つです

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

本格的にプログラミングっぽくなってきたね!

条件分岐処理の考え方

条件分岐処理は以下のように、ある条件に従って条件ごとの処理を行うことが可能です。

以下図の例では、条件部分の四角形で条件判断を行い、それぞれの処理に進むように指示します。

条件Xの処理では今までと同じようにprint関数などの処理を行います。

早速コード例から理解を進めていきましょう。

if文の書き方

if文の基本

早速簡単な例から始めます。こちらのコードをコピペして実行してみてください

何度か実行して入力を求められる部分では100とそれ以外の数値を試してみましょう

python入門~input関数と数値変換

# input関数で入力値を受け取り
num = input("数字を入力してください:")

# 数値に変換
num = int(num)

# if文で比較して100の場合のみprint処理を実行
if num == 100:
    print("入力された数字は100です")
100を指定したときだけprint処理が実行されるね

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

正しいです。比較演算子と呼ばれていて、以前紹介した四則演算で利用する演算子とは異なります

こちらが主な比較演算子の種類です。

演算子 使い方
== 左辺と右辺が等しい場合
!= 左辺と右辺が等しくない場合
> 左辺のほうが大きい場合
>= 左辺が右辺以上の場合
< 右辺のほうが大きい場合
<= 右辺が左辺以上の場合

※オブジェクト比較の演算子もありますが今回は省略しています

文字列の判定は上2つ、数値の判定は全てに使われます。いずれもよく使う演算子なので覚えておきましょう。

ちなみにコード上ではイコールは代入を指す記号として使われるため、if文などの書き方では、他言語でも上記の通り2つ連続して表現することが多いです。

もう1点インデントについても触れておきます

if文の次の行は頭に空白(スペース)が空いています。こちらをインデントと呼びます。

この場合のインデントはif文の中で処理する対象を表現することが可能です。以下例の通り、2行を処理することもできます。

num = input("数字を入力してください:")

# 100の場合はprint行が2つ実行されます。100以外の場合は何も実行されません
if int(num) == 100:
    print("入力された数字は100です")
    print("処理を終了します")

※上記例の通り、if文内で数値変換して比較することも可能です

インデントはスペースいくつ空ければいいの?
実は明確にはルールとして定まっていません

以前紹介したとおり、コーディングルールに記載されていることが多いため習うようにしましょう

独学時点であれば半角スペース4つとするのが無難です

スペースの数に決まりはないのですが、全角スペースを使ったり、スペースの数が他の行とズレているとエラーになるので注意しましょう。

特に全角スペースの罠は初心者の方は引っかかることが多いです。

コーディングにおいて全角スペースは原則利用しないため、確実に半角スペースを入力するように意識しましょう

if-else文の書き方

続けて上記例で100以外の処理を入力したときにもprint処理されるようにしてみます
num = input("数字を入力してください:")

# 100以外の場合はelseの処理が実行されます
if int(num) == 100:
    print("入力された数字は100です")
else:
    print("入力された数字は100以外です")
else=その他のってことね。分かりやすい!
ifの外に書いてしまうと全ての処理で通ってしまうため注意しましょう
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処理に入ります。

上記処理もコピペして試してみましょう
100...50...10...1で確認できたよ。ただ数字を入れるとエラーになっちゃう。「数字じゃない」って出すこと出来ないかな?
今回のif文と数値チェック用のメソッドを利用することで可能です!

python入門~関数とメソッドの違い

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

早速、上の質問の回答として数値をチェックできるisdigitメソッドを利用しましょう。
公式マニュアルを読むと、、文字列型に利用できて数値をチェック、TrueかFalseを返す。。
True、Falseの話も含めて次のコードで説明しますね
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以上ではありません")
if文だけでも色々と覚えることがあるんだね。ちょっと全て覚えきれないかも・・
まずはif文の基本だけを覚えて、こういった事ができる!という点だけ記憶の片隅に置いておけば大丈夫です

具体的な書き方が分からなくなったら、またこのページを参照する形で少しづつ覚えていきましょう!

python入門~if文を使った条件分岐

今回はif文の様々なパターンを紹介しました。今までの記事に比べるとボリュームが多かったですが、いずれも実際の業務で利用する書き方であり、ほぼ網羅した形になっています。

次の記事で紹介する繰り返し処理と合わせることで様々な処理が実現できるようになります。

自分なりにサンプルコードを書き換えながら、確実にマスターしておきましょう。

補足~本ページQ&A

if文の中にif文

数値の判定をしてOKだったら、数値比較をして、、って処理書けるといいよね
本文では紹介していなかったですが、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("入力された値は数字ではありません")
なるほど、こういう書き方も出来るんだね!
ただif文の入れ子は可読性(コードの読みやすさ)の観点からおススメできません
極力、階層を少なくするように書くことが望ましいです

ブール型のTrueとの比較は省略できる

Trueとの比較は省略できます。以下コード例です

省略する書き方のほうが一般的なので慣れてくると切り替えていくようにしましょう

num = input("数字を入力してください:")

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

# 100以外の場合はelseの処理が実行されます
if not num.isdigit():
    print("数字以外が入力されました")

isdigitメソッドではマイナス値が処理できない

実は今回紹介したisdigit含め、数値チェックのメソッドがいくつかあるのですが、いずれもマイナス値に対応できていません

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

-python
-

Copyright© ビギナープログラミング , 2020 All Rights Reserved.