[Python基礎]Pythonにおける繰り返し処理

Python

今回は、プログラムを書くうえで絶対に避けては通れないもののひとつ、繰り返し処理のお話です。

Pythonには2種類の繰り返し文があります。ずばりforwhileです。

Pythonに限らず他の言語でも共通してその2種類かそれ以上あるのではないでしょうか?(特性は多少違ってくるかもしれませんが)

今回はforとwhileそれぞれの解説、使い分け方について簡単なソースコードを用いて解説します。

スポンサーリンク

forについて

Pythonにおけるforはあらかじめ処理を繰り返す回数が決まっている場合や、リストなどの配列系オブジェクトに対して処理をしたい場合に用いられることが通常です。

forの具体的な使用方法を解説します。

まず書き方としては

for 変数 in 繰り返す対象:

です。末尾のコロンは忘れがちなので注意しましょう。

改行して、以降は4マス開けて(インデントして)繰り返したい処理を書きます。

“繰り返す対象”って何ぞやとなりますよね。。ボキャが乏しい筆者は、良い表現が思い浮かばなかったので”繰り返す対象”とさせていただきました。
具体的には配列オブジェクトやrange関数のことです。以下の使用例を見ていけば何となくわかるかと思います。すみません、、

forの使用方法が何個かあるのでそれぞれ説明します。

配列系オブジェクトに対するfor

配列系オブジェクトについて、格納されているすべての要素に対して処理をしたい場合、forを使えば簡単に実現できます。

配列の例として適当なリスト、アルファベットa~fまで格納されたtest_listがあるとします。

それに対して、

for value in test_list:

と書くことで、リストの要素の数だけ処理するループが出来ます。(例の場合だと6回分のループ) そして変数valueにはリストの要素が代入されます。

test_list = ["a", "b", "c", "d", "e", "f"]
for value in test_list:
    print(value)

上のソースコード実行しますと以下のように出力されます。

a
b
c
d
e
f

rangeに対するfor

事前に繰り返す回数が決まっている

一定の処理を希望の回数だけ繰り返したい場合もforが便利です。

この場合ではrangeを用いて以下のように書きます。

for i in range(6):
    print(i)

ちなみに上のコードの出力結果は以下のようになります。

0
1
2
3
4
5

6回分ループしていることが分かります。

rangeでは繰り返す範囲やステップ数を設定可能

rangeには第三引数まであります。第一引数は開始値、第二引数は終了値、第三引数はステップ数(値の増加数)です。

for i in range(2, 10, 2):
    print(i)

以下のように出力されます。

2
4
6
8

rangeの第二引数は、

if i => 10:
    break

のような働きをします。10以上の積算が観測されたらループを脱出します。for文では上のような書き方をせずとも実現できるため、コードがすっきりします。

また、rangeは引数を2つだけにすると(start, stop, 1)、1つにすると(0, stop, 1)と勝手に認識してくれます。

whileについて

もうひとつの繰り返し文whileは、基本的に待機処理として用いられることが多いです。なぜならwhileなら無限ループを簡単に書けるためです。

一例として、コンピュータビジョンの分野で能力が発揮されます。WEBカメラからの画像を映像として出力する際にwhileが使われたりします。映像とは所詮、画像を連続に並べたものですからね。

whileによる無限ループ

while True: で無限ループを作成できます。

注意点として、本当に無限ループさせないためにも何らかの形でbreakを書きましょう。処理が永遠に終わらなくなり強制的に終了せざるを得ません。強制終了はあまりよくないので、breakは必ずセットで書きましょう!!(2回目)

ちなみにbreakはループを抜けるための関数です。

以下はカウントが20を超えたらループを抜けるというものです。もう一つ注意点として、whileはforのように勝手にカウントする機能は無いので、3行目のようにcount+=1などといった積算を書き加える必要があります。一例としてこのソースコードを用いましたが、カウント系のコードにwhileは向きません。目で見て読みづらいので。

count=0
while True:
    print(count)
    count+=1
    if count >= 20: 
        break

出力結果

0
1
2
3
.
.
.
18
19

キーボード入力があったら処理を終了するなど、何らかの変化を検知するコードに対してwhileの無限ループは実力を発揮します。

以下はキーボード入力を例外処理として読み取り、breakする無限ループのコード例です。ctrl+cでループを抜けられます。

import time

try: #例外処理用
    while True:
        print("hello") 
        time.sleep(0.5) #0.5秒遅延
except KeyboardInterrupt: ##ctrl+cを押すと終了する 例外処理を用いてキー入力を待つ方法
    print("FINISH") #キー入力されたら表示される

出力結果

hello
hello
hello
.
.
.
FINISH

無限ループをbreakさせる方法は様々ありますがその一例を紹介しました。

whileで有限ループ(for的な使い方)

for的な使い方も出来ますが、コードが少し煩雑になる為、わざわざwhileで書くメリットはありません。唯一あるとすれば、処理速度がほ~~んの少しだけ速くなるくらいですかね。目に見えて分からないと思いますがw

count = 0
while count < 5:
    print(count)
    count+=1

出力結果

0
1
2
3
4

注意点として、無限ループの説明でも触れましたがcount<5などと設定してもループ内でカウントする機構が無いと、カウントされず無限に処理が終わりません。以下のように出力されます。

0
0
0
0
0
0
.
.
.

まとめ

いかがでしたでしょうか?

要点をまとめると

  • forは最初から分かっている有限ループに用いる
  • whileは待機処理を表現する際に用いる

です!

マスルキン

当ブログ管理人のマスルキンです。

高専電気系学科に5年間在籍。卒業後は専攻科に進学し現在に至る。

生まれつき聴覚障害があり
補聴器の使用、コミュニケーションでは読唇や手話などを用いています。

当ブログでは
・プログラミング・研究関係の備忘録
・趣味(筋トレ、カメラ、プラモデル、etc...)
・自身の日常
などを自由気ままに皆様に発信いたします。

記事が皆様のお役に立てば幸いです。

マスルキンをフォローする
Python プログラミング
スポンサーリンク
マスルキンをフォローする
マスルキンの部屋

コメント

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