while文

【Python】while文の基本的な使い方

【Python】while文の基本的な使い方

Pythonでwhile文により繰り返し処理をする方法について解説します。

while文によるループ処理

Pythonで、繰り返し処理を行う場合には、while文を使用できます。繰り返し処理でよく使用されるのはfor文ですが、一定条件に一致する場合に処理を継続したい場合にはwhile文の方が便利です。なお、for文については「for文の基本的な使い方」を参考にしてください。

この記事では、Pythonにおけるwhile文による繰り返し処理をする方法の基本について解説します。

while文の基本的な使い方

Pythonにおけるwhile文の構文は以下になります。

while文
while 条件式:
    処理コード...

while文は、条件式がTrueの間、処理を繰り返します。以下の使用例を見ながらwhile文の使い方を確認しましょう。

# while文
count = 1
while count <= 5:
    print(f'count: {count}')
    count += 1
【実行結果】
count: 1
count: 2
count: 3
count: 4
count: 5

上記例では、count5以下の場合は、count値のprintを繰り返します。

while文は条件式の真(True)/偽(False)により繰り返し処理を実行するため、条件がTrueとなり続けるような条件を指定すると、プログラムが終了しない無限ループ状態になってしまいますので注意してください。例えば、上記例でcount += 1の記述を忘れると無限ループとなってしまいます。

break文によるループの終了

while文は条件がTrueである限り繰り返しを継続します。条件を満たした時に処理を中断する際には、break文を使用します。

なお、無限ループの特徴を利用して無限ループ状態を作り出し、条件を満たした場合にbreak文で処理を中断するというような使い方はよくします。例えば、GUIアプリケーションのイベントーループやサーバーでのリクエストの受け付け、CUIツールでのユーザーからの入力の受け付けなどで利用されることが多いです。

break文は以下のように使用します。

# breakでループを抜ける
while True:
    value = input("値を入力してください(終了する場合は'q'): ")
    if value == 'q':
        break
    print(f'入力値は、{value}です。')
【実行結果例】
値を入力してください(終了する場合は'q'): 1
入力値は、1です。
値を入力してください(終了する場合は'q'): 2
入力値は、2です。
値を入力してください(終了する場合は'q'): 3
入力値は、3です。
値を入力してください(終了する場合は'q'): q

上記例は、ユーザーの入力を受け付け、入力値をprintするCUIツールです。ユーザーからqが入力されるまでは処理が継続され、qが入力された時点でbreak文により繰り返し処理を抜けて処理を完了します。

continue文による次のループへのジャンプ

上記で紹介したbreak文は一定条件を満たす場合にwhile文を終了する方法でした。一定条件を満たした場合に、以降の処理をスキップして次のループへ進みたい場合はcontinue文を使います。

# continue文で次のループへ
while True:
    value = input("偶数を入力してください(終了する場合は'q'): ")
    if value == 'q':
        break
    elif int(value) % 2 != 0:
        # 奇数の場合は次のループへ
        continue
    print(f'偶数の入力値は、{value}です。')
【実行結果例】
偶数を入力してください(終了する場合は'q'): 1
偶数を入力してください(終了する場合は'q'): 3
偶数を入力してください(終了する場合は'q'): 2
偶数の入力値は、2です。
偶数を入力してください(終了する場合は'q'): 4
偶数の入力値は、4です。
偶数を入力してください(終了する場合は'q'): q

上記例では、入力が偶数の場合は値をprintで表示し、奇数の場合は処理をスキップして次のループへ進みます。実行結果を見ると、奇数の場合には値が表示されていないことが分かります。

elseによる正常終了の確認

while文の処理が正常に終了しているかを確認したい場合には、elseで確認することができます。正常終了と言っているのは「break文が実行されていない」ということです。

以下の例で確認してみましょう。

# 正常終了する場合
data = ['A', 'B', 'C']
idx = 0
while idx < len(data):
    if data[idx] == 'Z':
        break
    print(f'data[{idx}] = {data[idx]}')
    idx += 1
else:
    print('処理正常終了')

print('=====')
# 正常終了しない場合
data = ['A', 'B', 'Z', 'C']
idx = 0
while idx < len(data):
    if data[idx] == 'Z':
        break
    print(f'data[{idx}] = {data[idx]}')
    idx += 1
else:
    print('処理正常終了')
【実行結果】
data[0] = A
data[1] = B
data[2] = C
処理正常終了
=====
data[0] = A
data[1] = B

上記例は、前半部分は「break文が呼び出されないケース」、後半部分は「breakが呼び出されて処理を抜けるケース」となっています。

前半の処理では、break文が呼び出されないのでelseの処理に入り"処理正常終了"というprintが実行されています。一方で後半の処理ではbreak文が呼び出されているのでelseの処理に入っていないことが分かります。

このようにbreak文の実行有無を確認するのにelseは便利です。

まとめ

Pythonでwhile文により繰り返し処理をする方法について解説しました。

while文は、一定条件に一致する場合に処理を繰り返す場合に便利です。break文やcontinue文などを使うことで柔軟に繰り返し処理を実装することができます。

条件に一致する限り繰り返しを継続するため、無限ループにならないように条件に注意が必要です。なお、無限ループをあえて使用してGUIのイベントループなどを実装するといったことはよく行われます。

while文は、Pythonに限らず多くのプログラム言語における重要な制御構文です。しっかりと使い方を覚えて使えるようにしましょう。