Pythonループとフロー制御の理解(初心者向け)

Pythonは現在、最も広く使用されている言語の一つです。ほぼすべての他のプログラミング言語と同様に、Pythonにはループ構造があります。forループやwhileループなどのPythonのループを使用すると、開発者はコレクションを反復処理したり、さまざまな条件に基づいて処理を行ったりすることができます。

このチュートリアルでは、各種類のPythonループの作成と使用方法、およびbreakpasscontinueのPythonステートメントを使用したループの制御方法について学びます。

それでは始めましょう!

前提条件

この投稿はステップバイステップのチュートリアルです。一緒に進める場合は、Python v3.6以降がインストールされていることを確認してください。このチュートリアルでは、Windows 10マシンでPython v3.9.2を使用します。

イテラブルなPython構造の理解

ループを学ぶ前に、Pythonのイテラブルな概念について学ぶ必要があります。ループは、リストタプル辞書などの要素のコレクションを処理します。これらの構造は各々複数の要素を含んでおり、個別に処理することができる「反復可能な」要素を持っています。したがって、各構造はループが個々に処理できる要素を持つ「反復可能な」ものです。

何かが繰り返し可能であると言われるとき、それはループでコレクション内の各オブジェクトを読むことができる要素であることを知ってください。

PythonのForループ

まず、forループを学ぶことからこのチュートリアルを始めましょう。forループは、繰り返し可能な式によって制御される文または文のブロックの実行を繰り返します。言い換えると、要素のコレクション内の各アイテムに対してコードを実行します。

Forループと文字列

例えば、文字列のような繰り返し可能なアイテムを持っているかもしれません。Pythonでは、文字列は文字のシーケンスです。各文字列は文字の組み合わせで構成されています。たとえば、文字列ADAMがあるかもしれません。この文字列は、ADAMの4つの繰り返し可能な文字で構成されています。

Pythonでは、1つの文字列として、Pythonは下記のように1つの要素、ADAMしか見ません。

One element in Python

しかし、Pythonの文字列は繰り返し可能なので、Pythonはその文字列を文字の配列に「分解」し、それぞれの文字を1つずつ処理することができます。そのためには、以下のようにforループを作成します。

forループにはターゲットまたはイテレータ(この場合はletter)があり、各繰り返しを表すために使用されます。そして、inキーワードを使用して処理したい繰り返し可能な要素(ATA)をPythonに指示します。文字の配列の各文字は文字列のinです。

その後、forループの内部で、各繰り返しのために実行したいコードを作成します。この例では、Pythonは単純に文字の配列(文字列)の各文字を出力しています。

ATA = "ADAM"
for letter in ATA:
    print(letter)

Pythonは、文字列の各文字を1つずつ表示します。

Printing each character in a string with a for loop

forループは、リストや範囲などの反復可能な要素を反復処理できます。このセクションの例でATArange(5)に置き換えると、同じ結果が表示されます。

Pythonのwhileループ

forループでは、要素のコレクションごとにコードを実行しますが、whileループでは特定の条件に基づいてコードを実行します。具体的には、Pythonは条件が偽である間、whileループを継続して実行します。

たとえば、Pythonでよくある要件は、カウンタを作成し、コードを定義された回数実行することです。この状況を作成するには、現在のカウントが最大カウントを超えたときにTrueを返す条件を定義する必要があります。

たとえば、整数0を格納するcountという変数を使用するとします。この整数を1ずつ増やすが、5を超えないようにしたい場合、次のようなものを作成できます。

count = 0
count = count + 1
count = count + 1
count = count + 1
count = count + 1
count = count + 1
print(count)

上記の方法は機能するかもしれませんが、非効率です。DRYの原則を使用していません。自分自身を繰り返しています。その代わりに、countが6より小さい、Pythonにcountに1を追加するように伝えるために、whileループを使用してコードの長さを短縮します。

以下の例では、whileループを使用して条件(count < 6)を定義し、条件がTrueである、式(printステートメント)を実行し、countを1増やします。

count = 0
while (count < 6):
   print('The count is:', count)
   count = count + 1
Demonstrating a Python while loop

ループ内のフロー制御

前の2つの例では、Pythonのforループとwhileループはそれぞれ独自に開始し、終了しました。forループはイテラブルなコレクションの末尾に達したため終了し、whileループは条件がTrueに評価されなくなったため終了しました。

Pythonのループは通常「正常に」終了することが一般的ですが、ループの動作を途中で終了させたり、1つ以上の繰り返しをスキップしたりすることもできます。

break文

ループを途中で終了する必要がある場合は、break文を使用して終了することができます。ループ内で実行されると、break文は現在の繰り返しでループを停止します。

通常、特定の条件がループ内で満たされた場合にbreak文を使用します。例えば、前のforループの例では、forループが文字列内の文字の配列を反復処理することを学びました。おそらく最初のDまでのすべての文字を処理したい場合があります。

forループ(またはwhileループ)を停止するには、一致する特定の条件を定義し、その条件にbreak文を含めるようにします。以下に示すように。

以下の例では、Pythonはイテレータ変数letterがDに等しくなった瞬間にforループを終了します。

ATA = "ADAM"
for letter in ATA:
	print(letter)
	if letter == "D":
		break
Demonstrating the break statement in a Python loop

continue文

特定の条件に基づいてループを作成する必要があるが、すべてのイテラブル要素を処理する必要がない場合は、continue文を使用して繰り返しをスキップすることができます。

break文はループ全体を終了させるのに対して、continue文は現在の繰り返しをスキップします。上記の例を使用して、文字列ADAMの各文字を繰り返し処理したいが、Dの文字をスキップしたい場合、条件文(if letter == "D")とcontinue文を使用して、次のようにスキップすることができます。

ATA = "ADAM"
for letter in ATA:
	if letter == "D":
		continue
	print(letter)

以下のPythonの出力結果から、continue文がDの文字に遭遇した際にprint文をスキップしたため、Dの文字が表示されていないことがわかります。

Using the Python continue statement

パスステートメント

次に、フロー制御セクションをpassステートメントで終了しましょう。passステートメントは、実際には何も行わないループをPythonスクリプト内で定義する方法です。

以下のように、何らかの理由でPythonスクリプトに残したいforループがあるとしますが、実際には内部で実行する式がありません。

for value in "adam":

Pythonでは、式がないforループを定義すると、IndentationErrorが発生します。

Error about no loop expression

しかし、forループ内にpassステートメントを追加すると、Pythonは何もしないでforループを実行します。

Using the pass statement

結論

このチュートリアルでは、Pythonのループの始め方について学びました。Pythonのループの動作や制御方法を学ぶことで、より多くの機会が生まれ、堅牢なPythonプログラムを作成することができます。

新たに得た知識を活かして、コード内にどこにループを挿入しますか?

Source:
https://adamtheautomator.com/python-loop/