Python while文の使い方 breakとcontinue

Python学習【365日チャレンジ!】38日目のマスターU(@Udemy11)です。

今日は【while True:】ではまって、ちょっと頭を悩ませていました。

このwhileのあとにある【True】の意味がわかっていなかったんです。

いわゆる

無限ループ(∞)

ってやつですね。

酒井さんの講座では、詳しい解説がなくて普通に使ってたので、特に何も考えず、自分で考えたコードにbreakを入れてませんでした。

そしたら、永遠print出力を繰り返してちょっとびっくり。

while文の中にあるif文は条件を満たさなくても、永遠if文の行を繰り返し実行してたんですね。

基本的に、while文は、

while 条件式:

で、条件式を満たしている場合、つまり条件式の部分がTrueになるときは、永遠にループするって意味なんですよね。

今日は、そんなはまったことも含めてwhile文でのbreak文やcontinue文の使い方を学習します。

昨日の復習

昨日は、while文の基本の使い方を学習しました。
整数型の変数を定義して、数値を足していったり引いていったりして条件を満たさなくなるまで実行を繰り返すものから、リスト型変数を使って実行を繰り返すやり方を試しました。

a = 0
while a < 5
    print(a)
    a += 1
 
count = [1, 2, 3, 4]
while count:
    print(count)
    count.pop()
 
box = []
a = 1
while len(box) < 5
    print(box)
    box.append(a)
    a += 1

出力結果

0
1
2
3
4
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
[]
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]

これらのコードは出力結果が違うものですが、コードの書き方を変えても同じ出力結果が得られるのがおもしろいですよね。

無限ループ

続いて、breakの使い方について学んでいきますが、その前に、冒頭で紹介した初の無限ループ体験をしたコードを紹介しておきます。

l = 0
while True:
    if l < 5:
        print(l)
        l += 1

出力結果をみると、0から4まで出力されて、あとは何も表示されないので、問題なくループを抜けていると思ってしまうのですが、ここが落とし穴です。

Python while文の無限ループ

出力されたコンソールは正常終了した場合と同じ出力結果になっていますが、プログラムはまだ動いていて、右上の【×】アイコンがタップできる状態で、タップすると色が薄くなり、プログラムが強制終了されます。

デバッグで確認したところ、

if l < 5:

この部分が、whileから抜け出せずに永遠と実行している状態でした。

こんな状態にならないためにもきっちりとwhileループを抜け出すbreakを入れる必要があるわけです。

breakの使い方

breakはその時点でwhileループから抜け出すためのコードです。
while文のループしている状態を終了させるには、昨日学習したように、whileのあとに条件式を記載して、条件を満たさなくなった時点で終了する方法と、breakを使って終了させる方法があります。

基本的にwhileのあとにTrueを続けた場合は、breakを使って終了させないとループを抜けることはできません。

意図して無限ループを体験するのは別として、意図せず無限ループに陥らないためにもきちんと【while True】を理解しておきましょう。

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

出力結果

0
1
2
3
4

このコードでは、if文にbreakする条件を記載して、条件が満たされたときに、break文でwhileループを抜けます。
条件以外のときは、変数countを出力してcountに1を足してループを継続します。

次は「1から10まで出力したあと、’so big’と出力する」コードを3通り書いてみました。

a = 1
while True:
    if a <= 10:
        print(a)
        a += 1
    else:
        print('so big')
        break
 
b = 1
while True:
    if b > 10:
        print('so big')
        break
    else:
        print(b)
        b += 1
 
c = 1
while True:
    if c > 10:
        print('so big')
        break
    print(c)
    c += 1

break文をelseのあとに持ってくるバターンと先にbreakの条件を入れるパターン、最後は、elseを省いたパターンです。

どれも出力結果は同じなので、どれでも構わないと思いますが、コードが短いのは3番めのパターンですね。

continueの使い方

続いて、continue文ですが、こちらはループを抜けるのではなく、ループの最初に戻るコードです。

whileループを抜けるわけではないので、breakも合わせて使う必要があります。

num = 1
while True:
    if num < 5:
        print('out of number')
        break
    if num == 3:
        num += 1
        continue
    print(num)
    num += 1

出力結果

1
2
4
5
out of number

3を除いて1から5までを出力したあと、’out of number’と出力したあとwhileループを抜けるコードですが、変数numが3のときだけcontinueから下のコードを飛ばして次のループをはじめます。

continueの前の変数numに1をプラスするコードを書き忘れすと、変数numは3から変わることがないため、これまた無限ループに入ってしまうので、注意しましょう!

ループ最強!

Python 無限ループ

while文が最初に学習したPythonのループ文ですが、ほんとループっておもしろいですよね。
同じ作業を繰り返し自動で行えることこそ、プログラミングの醍醐味だと思うので、

ループ文を制するものがPythonを制する

なんて勝手に思っちゃってます。(Python制するってどういう意味???)

ちなみにエクセルでVBA使うときにもループ文が必要不可欠になるのですが、Pythonを学習することで、VBAの理解も進んでいるような気がします。

それでは、今日はこのへんで、Good Python!