この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。 hirocom777.hatenadiary.org 前回は、制御構文の1つである選択処理について学びました。何らかの条件を指定して、条件によって実行する処理を選択できます。
今回は反復処理について学んでいきたいと思います。
反復処理
おさらいです。反復処理とは条件を満たす間、同じ処理を繰り返し実行する処理です。Pythonにはwhile文とfor文、2つの反復処理のための構文があります。
while文
while文は条件式がTrueの間、処理を繰り返し実行する構文です。以下のように記述します。
while 条件式: # 処理
条件式にはブール値を返す値、数式が記述されます。if文と同じです。処理は、インデントする必要があります。こちらもif文と同じです。これで条件式がTrueを返している間、処理部分に記述している内容を実行します。処理の結果、またはその他の要因で条件式がFalseになると、処理をせずにwhile文をぬけます。
i = 5 while i: print(i, end=' ') i -= 1 # 5 4 3 2 1 と表示される
print関数のendオプションは、表示末尾に出力する文字を指定できます。省略すると\nとなります。
条件式がTrueの間は処理を抜けません。条件式の設定を間違えると無限に処理を実行する形になるので、注意が必要です。
for文
for文は順番のある要素の集まり(オブジェクト)に対して、順番に取り出しながら反復処理を行います。要素を取り出す順番が決まっているオブジェクトを、イテラブルなオブジェクトといいます。以下のように記述します。
for 変数 in イテラブルなオブジェクト: # 処理
オブジェクトから取り出した要素を変数に代入して、最後の要素まで繰り返します。以下は文字列データを使用した例です。
for char in 'Hello': print(char, end=' ') # H e l l o と表示する
これまで御紹介したイテラブルなオブジェクトは文字列型のデータだけです。他にも色々なものがあります。ここではrange関数を使ってみましょう。range関数は整数のシーケンスを生成します。以下のように記述します。
range([start,] stop [, step])
整数startから整数stop未満のシーケンスを生成します。
startは開始値を指定します。省略した場合は0になります。
stopは終了値の1つ後を指定します。
stepは、startから増やしていく値を指定します。省略した場合は1になります。
以下はrange関数を使用した例です。
for i in range(2,10,3): print(i, end=' ') # 2 5 8 と表示する
ネスト
ネストとは入れ子構造のことです。前回ご紹介したif文や、今回のwhile文、for文の処理部分にif文、while文、for文を記述できます。記述部分の処理についてはさらにインデントが必要です。以下はfor文とif文を使ったネストの例です。
for i in range(1, 11): if i % 3 == 0: print(i, end=' ') # 3 6 9 と表示する
反復処理をネストすることもできます。
for x in range(1,10): for y in range(1,10): print(f'{x}×{y}={x*y}') # 九九の結果を表示する
break文
反復処理を実行中に、条件次第で処理を抜けたい場合があります。この場合はbreak文を使用します。反復処理の中にbreak文を記述すると、反復処理から強制的に抜けます。break文の後に記述されている処理は、実行されません。以下はbreak文を使用した例です。
num = 0 while True: num += 1 if num >= 5: break print(num, end=' ') # 1 2 3 4 と表示する
この様に、break文はif文で条件指定して使用する場合が多いです。反復処理をネストしている場合、内側の反復処理でbreak文が実行されると内側の反復処理のみ抜けます。
continue文
continue文は反復処理実行中に条件によって、その後の処理を省略して処理の先頭に戻って継続します。
num = 0 while num <= 5: num += 1 if num % 2: continue print(num, end=' ') # 2 4 6 と表示する
continue文もif文で条件指定して使用する場合が多いです。
elseブロック
反復処理の最後にelseブロックを記述すると、反復処理終了後の処理を記述できます。以下のように記述します。
while文、またはfor文 # 反復処理 else: # 反復処理終了後の処理
elseブロックに記述した内容は、反復処理をbreak文で抜けた場合、実行されません。
次回は関数とオブジェクト
いかがでしょうか。反復処理を使用すると、複雑、大量な処理を簡単に記述できそうです。次回は関数とオブジェクトです。これまで御紹介した以外の、イテラブルなオブジェクトをご紹介します。お楽しみに!!