Pythonのwhile文のbreakを使ったループの中断条件の作り方

このページでは、while文のbreakの基本について詳しく解説していきます。同時に、それと一緒に使われることが多い無限のwhileループについても触れていきます。

ぜひ、ここでwhile文のbreakをマスターしましょう。

while 文の基本
while文の基本については「Pythonのwhile文による繰り返し処理(whileループ)の基本」で解説しています。先に目を通しておきましょう。
目次

1. while文のbreakとは

Pythonのwhile文のbreakは、「ある条件を満たす間は繰り返し処理を行うが、その間に中断条件を満たした場合は繰り返し処理を中断する」というコードを書く時に使います。次のように書きます。

In [ ]:
while 条件式:
    処理文任意
    if 条件式:  #  whileブロックの中にif条件式を書く
        処理文任意
        break  #  ifブロックの中にbreakを書く
        処理文任意
    処理文任意

このように中断条件はif文で書いて、その条件を満たした時にループを中断するようにbreakはifブロックの中に書きます。ちなみに、if文については「Pythonのif文を使った条件分岐の基本と応用」でご確認ください。

条件分岐の流れは下図のようになります。

例えば、以下のコードをご覧ください。

In [1]:
num = 0

while num  <= 100:
    if num == 5:  # numが5になった時点で中断
        break
    print(num)
    num += 1
0
1
2
3
4

変数numの値が100以下の場合は、「print(num)」で数値を出力し、「num += 1」で変数numの数値を1つずつ足していくという処理を行います。つまり0から100までの数値が一つずつ出力されるコードです。これの中にif文で「num == 5」の時にbreakするように書いています。結果、ここで処理が中断されてループを終了しています。

このようにbreakは、処理を中断してwhileループを終了させるものです。

2. while文の無限ループとbreak

while文では、「while True:」と書くと常に条件がTrueとなって無限ループになります。厳密には比較演算子を除いて、条件式に以下の4つ以外を書くと、常にTrueと判定されて無限ループになります。

  • ブール値としてのFalse
  • None(null)
  • 数値の0(整数:0、浮動小数点数:0.0、複素数:0j)
  • 空の文字列、リスト、タプル、辞書

無限ループは、その名の通り無限に処理を繰り返すので、永遠に終わることはありません。そのため必ずbreakで中断条件を作っておく必要があります。つまりwhile文の無限ループを書くときはbreakもセットです。

なお、無限ループについては『Pythonの「while True:」による無限ループの解説』で詳しく解説しています。

それではwhile文の無限ループとbreakを使った例を見てみましょう。

次のコードをご覧ください。random.randint()で1から13の数字をランダムに3つ生成し、それを合計するものを「while True:」の無限ループで作っていますが、数字の合計が21を超えた場合がbreakの条件になっています。

In [1]:
import random

while True:  #  無限ループ
    a = random.randint(1, 13)
    b = random.randint(1, 13)
    c = random.randint(1, 13)
    print(f'{a}, {b}, {c}: 合計{a+b+c}')
    if (a+b+c) > 21:  #  break条件
        print('合計21を超えました。バーストです。')
        break  #  ここでbreak
1, 12, 4: 合計17
7, 2, 11: 合計20
13, 9, 2: 合計24
合計21を超えました。バーストです。

このコードは「while True:」の無限ループなので、breakがなければ延々と処理を繰り返してしまいます。下図をご覧頂くと処理の流れを理解しやすいでしょう。

breakがなければ延々とwhileループを繰り返してしまうことが分かると思います

続いて、もう一つ例を見てみましょう。これも無限ループで自動で足し算の計算問題を生成し続けるコードです。

In [1]:
import random

miss = 0
correct = 0

while True:
    a = random.randint(1, 101)
    b = random.randint(1, 101)
    right = a + b
    answer = input(f'{a}+{b}は?')
    if int(answer) == a + b:
        print('正解')
        correct += 1
    else:
        print('不正解')
        miss += 1
    if correct == 5:
        print('全問正解!テストを終了します。')
        break
    elif miss == 1:
        print('不正解!テスト終了です。')
        break
    elif answer == 'q':
        print('強制終了します。')
        break
    
89+28は?1
不正解
不正解!テスト終了です。

今回は、breakの中断条件を3つ設定しています。5問正解した場合、1問でも間違えた場合、’q’を入力して強制終了した場合です。下図のような流れになっています。

これもbreakがなければ延々と終わりなく計算問題を解かなくてはいけなくなってしまいますね。ポイントとしてbreakの条件はいくつでも設定することができるという点も抑えておきましょう。その場合は、if文を使いこなすことが必要です。「Pythonのif文を使った条件分岐の基本と応用」でしっかりとマスターしましょう。

また、私の場合は、このような条件分岐図を書いておくようにしています。そうすれば、チーム内のプログラミングのスキルがバラバラでも、それぞれがどの部分を担当しているのかが明確になり、効率的に必要なパーツを作っていくっことができます。

3. まとめ

ここまで見てきたように、while文とbreakを使いこなせるようになると作ることのできるプログラムの幅が拓けていきます。そのためには中断条件はif文で作りますので、そちらもしっかり理解しておく必要があります。

一つずつ習得していきましょう。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる