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.
そろそろお勉強記事以外も書こう。そうしよう。
この記事が気に入ったらサポートをしてみませんか?