10.場合に応じた処理 (2015.3.20)

プログラム制御の要となるのが、この場合に応じた処理です。Pythonには条件分岐となるif、繰り返し処理となるwhileとforの3つが用意されています。

■条件分岐(if)
条件によって異なる処理を実行するもので、基本形は次のようになります。
if <条件式>:
 <処理-1>
 <処理-2>
 ・・・

意味:もし条件式が真なら、処理-1、処理-2・・・と続ける。
処理-1や2の前には必ずインデントが必要になる。また、条件式の後に:を付けること。

次のように条件に当てはまらない処理もできます。
if <条件式>:
 <処理-1>
else:
 <処理-2>

意味:もし条件式が真なら処理-1、そうで無ければ処理-2を実行する。
処理-1や2の前には必ずインデントが必要になる。また、条件式とelseの後に:を付けること。

条件式には関数を使うこともできます。また、比較式がよく使われます。例えば変数が1かどうか評価するにはa == 1と書けば良いのです。この時の==を比較演算子と呼び、!=(否定)、<(左辺が小)等色々あります。条件分岐の対象となる処理はインデントがある部分だけで、インデントの無い処理は条件分岐とは無関係に実行されます。

Pythonの記述方法は一見簡単なように見えますが、記述を誤りやすいので注意が必要です。他のプログラム言語のように、括弧を使って明確に表す方が個人的にはわかり易く感じますが、ルールなので仕方ありません。インデントは半角スペースとタブが使えますが、タブはエディタの設定によって文字数が変ってくるため、一定の表記になるように半角スペースで統一した方が良いでしょう。タブが多いと条件分岐が深くなった時に見にくくなるので、バランスの良い半角4個分で統一すると良いと思います。

条件式には複数の条件を記述することもできます。一般的には比較演算子と論理演算子を組み合わせて使います。

elif文を使えば次のように複数の条件式によって分岐処理できます。
if <条件式-1>:
 <処理-1>
elif <条件式-2>:
 <処理-2>
・・・

意味:もし条件式-1が真なら処理-1、そうで無く条件式-2が真なら処理-2を実行する。
処理-1や2の前には必ずインデントが必要になる。また、各条件式の後に:を付けること。

ここでもelifなどと言う妙な表記が出てきます。素直にelse ifとすれば良いのに、どうもPythonの記述方法は短く記述することに重点を置いて、本来の意味的なものを軽視している気がします。慣れればどうということも無いですが、個人的にはこのような記述の仕方には違和感が残ります。

■繰り返し(while)
ループ処理を行うもので、基本形は次のようになります。
while <条件式>:
 <処理>

意味:もし条件式が真なら、処理を行う。
処理の前には必ずインデントが必要になる。また、条件式の後に:を付けること。

なお、条件式を真(true)とすることで、繰り返し処理は無限ループとなります。

■連続処理(for~in)
シーケンス型のオブジェクトから要素を順に変数に代入し、要素の数だけ繰り返しを行うもので、基本形は次のようになります。
for <変数> in <オブジェクト>:
 <処理>

意味:オブジェクトから要素を1つづつ取り出し、変数に入れて処理を行う。
処理の前には必ずインデントが必要になる。また、オブジェクトの後に:を付けること。

for文と共に組み込み関数のrange()が多く使われます。次にその例を記します。
for i in range(3):
 print('X')

とした場合、0~2の3回処理が繰り返されます。そのため、結果はXが3回表示されます。
*テキストにミスがあり、range(x)は0~x-1の処理回数です。

■繰り返し処理のバリエーション
繰り返し処理の途中で処理の流れを変えるもので、次のようなものがあります。
if~continueは繰り返し処理の途中でそれ以降の処理を止め、次の繰り返し処理に進む。
if~breakは繰り返し処理から抜ける。

whileやforの中にelse文を書くと、ループ終了時にelse以下の処理を実行します。途中でbreakがあるとループから抜けるので、breakしなかった場合の処理を行いたい時に便利です。

■組み込み例外による例外処理
Pythonに元々用意されている例外処理のことで、IndexErrorやKeyboardInterrupt等があります。特にKeyboardInterruptはキー入力があった時の処理を指定できるので、使う場面も多いと思われます。