Pythonの制御構造-if文

記事の内容

 この記事では、Pythonの条件分岐処理であるif文の使い方について説明します。
 プログラムを作っていると、条件によってプログラムを処理したりしなかったり、あるいは条件によって実行するプログラムを変えたりしたくなることがあります。このようなときに条件分岐処理の制御をおこなうのがif文です。

***わからない用語があるときは索引ページへ***

1.if文のサンプルプログラム

 まずはサンプルプログラム"if_ex1.py"を書いて動かしてみましょう。if文はプログラムを読んだ方がどういう制御なのか理解しやすいと思います。
 ただし、用語がたくさん出てきます。用語についてはサンプルプログラムに沿って順番に説明することとします。

##if_ex1.py

##テスト結果を入力して成績を表示する

##テスト結果をもとに成績を出力
##    60点未満・・落第
##    60点以上70点未満・・可
##    70点以上80点未満・・良
##    80点以上100点以下・・優


##コンソールからテスト結果を入力して数値型にキャスト
score_str = input("あなたのテスト結果を点数で入力してください >> ")
score = int(score_str)
print("\n")

##60点未満は落第
if score >= 0 and score < 60:
   print("あなたの成績は落第です")
   print("来年も頑張りましょう")

##60点以上70点未満は可
elif score >= 60 and score < 70:
   print("あなたの成績は可です")
   print("セーフ!!")

##70点以上80点未満は良
elif score >= 70 and score < 80:
   print("あなたの成績は良です")
   print("まあまあでした")

##80点以上100点以下は優
elif score >= 80 and score <= 100:
   print("あなたの成績は優です")
   print("おめでとうございます")

##それ以外は判別不能
else:
   print("あなたの成績は不明です")

 "if_ex1.py"は、コンソールから入力した点数に応じて優、良、可の成績が表示されます。入力されたスコアが0以上100以下にあてはまらない場合は不明だと表示されます。
 実行結果の例を示します。

あなたのテスト結果を点数で入力してください >> 40


あなたの成績は落第です
来年も頑張りましょう

2.if文の構文

 以下に、if文の構文を示し、いくつかの用語について説明ます。

if <条件式1>:
    <条件式1を満たしたら実行されるプログラムブロック>
elif <条件式2>:
    <条件式2を満たしたら実行されるプログラムブロック>
  :
  :##elif部は、必要数だけ追加可能
  :
else:
    <どの条件も満たさない場合に実行されるプログラムブロック> 

 図で表すとこんな感じです。

条件分岐


 if文は、if部ではじまり、if部、elif部、else部で構成されます。
 if部とelif部の文は条件式/論理式が後ろに続き、条件式の後ろには必ず":"(コロン)をつけます。if部とelif部は、後ろに続く条件を満たした場合にのみ、次の行から記述されるプログラムブロックを実行します。else部は、if部の条件も、elif部の条件も満たさないすべての場合に実行されます。
 if文は、0以上のelif部を書くことができます。つまり、elif部は省略することもできますし、サンプルプログラムのように複数のelif部で条件分岐の数を必要なだけ増やすこともできます
 else部は1つだけ書くことができます。省略することも可能です。else部を省略すると、if部とelif部のすべての条件式を満たさない場合、if文の処理がスキップされます。
 
 条件式とは、比較演算子(大なり">"や、小なり"<"など)を使って、条件を満たすか、満たさないかを評価する式です。演算の結果はbool型のデータとなります。bool型のデータは、TrueFalse2値のいずれかの値しかとりません。条件式が条件を満たせば演算結果はTrue、条件を満たさない場合は演算結果はFalseとなります。
 論理式とは、条件式のように、演算結果がbool型のデータになる式の総称です。比較演算子や論理演算子("and"や"or")を使って記述されます。


 if文について、より正確に説明すると、「if文におけるif部とelif部のブロックは、後ろに記述する論理式の演算結果がTrueになった場合にのみ実行される」となります。

 "if_ex1.py"をもう一度見てみましょう。if部の

score >= 0 and score < 60

が論理式になります。比較演算子">="は、左辺の値が右辺の値以上の条件を満たせばTrue、それ以外はFalseとなります。比較演算子"<"は、左辺が右辺未満の条件を満たせばTrue、そうでなければFalseとなります。最後に論理演算子"and"ですが、これは2つの論理式を使って

<論理式1> and <論理式2>

のように使います。2つの論理式の両方がTrueの場合のみTrueで、<論理式1>と<論理式2>のいずれかがFalse、および両方の論理式がFalseの場合はFalseとなります。日本語では、「Aが正しいかつBも正しい」のように、「かつ」と訳されます。

 "if_ex1.py"の実行例では、40と入力ので、if部の論理式

score >= 0 and score < 60

で合致し(Trueとなり)、if部に書かれたプログラムブロックが実行され、

あなたの成績は落第です
来年も頑張りましょう

と出力されました。
 Pythonで利用できる論理演算子については、次の記事で説明します。

3.Pythonのプログラムブロックについて

 プログラムブロックというのは、「同じ範囲に含まれているプログラムの文全体」のことです。単にブロックとよばれることもあります。
 「同じ範囲」と言っているのは、if文でいうと、if部の条件式を満たしたときに実行されるプログラムのことです。同様に、elifの条件式で実行されるプログラム、else部で実行されるプログラム文がそれぞれ同じ範囲(ブロック)となります。
 Pythonでは、ブロックをインデントをそろえることによって表現します。インデントで字下げする半角スペースの数はいくつでも構わないのですが、同じブロックのプログラム文はインデントがそろっていなくてはなりません。意味なく文の行頭位置をずらしたりするとプログラムが正常に動作しなくなります。
 "if_ex1.py"では、ブロックを表すインデントの数を4で統一しています。これは、インデントの数は4が推奨されているからです。以降の記事でもブロックのインデントは4で統一して表記することとします。
 また、前の記事で紹介しているPydev-Eclipseのプログラミング環境では、キーボードのタブキーを押下するとインデントが4になるように初期設定されています。

前の記事 次の記事


この記事が気に入ったらサポートをしてみませんか?