見出し画像

Pythonの勉強するよ【フロー制御編⑤】

どうも。前回の記事を見てくれた方、ありがとうございます。
前回はif文、else文、elif文について勉強しました。

【前回の復習】
・if文は、条件式がTrueの場合にブロック文が実行される。
・elif文は、if文の条件式がFalseかつelif文の条件式がTrueの場合に実行される。
・else文は、if文、elif文の条件式がすべてFalseの場合に実行される。

前回からいよいよフロー制御らしくなってきました。
今回はwhile文、break文、continue文について勉強していきます。

2.7.4 while文

処理を書いているときに、特定条件の間、処理をループしたいときはありませんか?そんな時に使われるのがwhile文です。
while文のブロックは、条件式がTrueの間ずっと実行されます。
while文の書き方は次のようになります。

while 条件式:
  コードのブロック

先ほども書いたように、while文は条件式がTrueの間、ずっと実行されます。
実際にどのようになるか見てみましょう。

>>> num = 0
>>> while num < 5:
	print('num = ' + str(num))
	num = num + 1
【実行結果】 
num = 0
num = 1
num = 2
num = 3
num = 4

1行ずつ見ていきましょう。最初はnum = 0なので、while文の条件式はTrueになり、ブロックが実行され、num=0が表示されます。その後、num = num +1のステップが実行されるため、numの値は1になります。
if文の時はここで終わりでしたが、while文の場合は、再度while文の条件式を判定します。numの値は1なので、また条件式はTrueになり、num=1が表示されます。これをwhile文の条件式がFalseになるまで繰り返します。(上のコードの場合はnum = 5になるまで)
それでは、while文の条件式がFalseにならなかったらどうなるのでしょうか?

>>> num = 0
>>> while num < 5:
	print('num = ' + str(num))

先ほどのコードからnum = num + 1の文を削除しました。これを実行すると、numの値が5以上になることはないため、ずっとwhile文が実行され、num=0が表示され続けます。(実際にやった人は、Ctrl +Cで強制終了しましょう。)
これを無限ループといいます。無限ループは、バグで発生することもありますが、意図的に作ることもあります。
その場合、以下のように書くことが多いです。

while True:
  コードのブロック

条件式にTrueが入っているため、ずっとループするわけですね。

【Point】
・while文のブロックは、条件式がTrueの間ずっと実行される。
・while文の書き方
while 条件式:
  コードのブロック
・条件式がTrueの場合、無限ループが発生する。

2.7.5 break文

さて、先ほどwhile文でのループについて説明しましたが、今度はループを抜ける方法について説明します。
それがbreak文です。使い方は非常に簡単。ループを抜けたい場所でbreakと書くだけです。実際のソースコードで見てみましょう。

>>> name = ''
>>> while True:
	print("What's your name?")
	name = input()
	if name == 'Alice':
		print('Hello, Alice!')
		break
【実行結果】
What's your name?
Bob
What's your name?
Ann
What's your name?
Alice
Hello, Alice!

上のソースコードでは、while文の条件式にTrueが設定されています。つまり無限ループを作っているので、通常だとずっとWhat's your name?と聞かれた後に文字を入力し続けることになります。
しかし、入力された値がAliceだった場合のみ、if文の条件式がTrueになり、Hello, Alice!と表示されたあとbreak文が実行されるため、無限ループを抜けることができます。
ちなみにbreak文で抜けることができるループは、break文が書いてあるブロックのループのみです。

while True:    # ループ1
	print('無限ループ1')
	while True:  # ループ2
		print('無限ループ2')
		break
【実行結果】
無限ループ1
無限ループ2
無限ループ1
無限ループ2
無限ループ1
無限ループ2
無限ループ1
無限ループ2

上のようなコードがあったとします。最初に無限ループ1と表示された後、無限ループ2が表示されます。そのあとbreak文があるためループを抜けますが、この時抜けるループはループ2のほうのループであり、ループ1は抜けません。そのため、実行結果のように無限ループ1と無限ループ2が交互に表示され続けます。

【Point】
・ループはbreak文を使うことでいつでも抜けることができる。
・break文で抜けることができるループは、break文が書いてあるブロックのループのみ。

2.7.6 continue文

ループを抜ける方法の次は、ループの先頭にもどる方法を説明します。
continue文を使うと、ループの先頭に戻ることができます。
実際のコードを見てみましょう。

num = 0
while num < 20:
	num = num + 1
	if num % 2 == 0:
		continue
	print('num = ' + str(num))
【実行結果】
num = 1
num = 3
num = 5
num = 7
num = 9
num = 11
num = 13
num = 15
num = 17
num = 19

上のコードでは、if文の条件式でnumの値が2の倍数か確認しています。
もし2の倍数だった場合、continue文が実行され、そのあとの処理は実行されず、while文の条件式の判定に戻ることができます。

【Point】
・continue文でループの先頭に戻ることができる。

まとめ

今回はwhile文、break文、continue文について勉強しました。
簡単なまとめは下になります。

【まとめ】
・while文のブロックは、条件式がTrueの間ずっと実行される。
・while文の条件式がTrueの場合、無限ループが発生する。
・ループはbreak文を使うことでいつでも抜けることができる。
・continue文でループの先頭に戻ることができる。

次回は、for文とrange関数について勉強していきます。ではでは。

P.S.

そろそろお勉強記事以外も書こう。そうしよう。

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