while 文によるループは、指定した条件式が False になると、ループを終了しますが、それ以外にも、ループの途中で break 文を実行すると、ループを抜け出せます。
たとえば、こんなプログラムを考えてみましょう。
input()関数で5回、数字を入力して、その2乗の値を表示する- ただし、入力された数字が
999なら、5回繰り返さずに処理を終了する
input()を10回繰り返す処理は、次のように書けます。
counter = 1 # 現在、何回目かを記録する変数
while counter <= 5: # counterの値が5以下なら繰り返す
text = input("数字を入力してください:")
number = int(text) # 入力した文字列を数値に変換する
print(counter, "回目:", number * number) # 入力した数値の2乗を表示する
counter = counter + 1 # counter の値に 1 を加算する
print("終了しました")
このプログラムを実行すると、次のような動作をします。
変数
counterに初期値として1を設定します。whileループを開始し、条件式counter <= 5がTrueの間、以下の処理を繰り返します。input()で文字列を入力し、結果を変数textに代入します。- 変数
textの入力文字列を、int()で整数に変換して変数numberに代入します。 - 変数
counterの値と、変数numberを2乗した値をprint()します。 - 変数
counterに1を加算します。
ループを脱出したら、終了メッセージを
print()します。
最初、変数 counter に設定されている値は 1 ですので、 while ループの条件式 counter <= 5 は True(真)となり、ループ内の処理が実行されます。
ループを一度実行すると、「4. 変数 counter に 1 を加算します。」 という処理で counter の値が加算され、2度目に while 文で条件を判定するときには、counter の値は 2 になっています。
同様に、3度目には counter も 3、4度目には 4 と1ずつ加算されて行き、最後に 6 になると、while ループの条件式 counter <= 5 が False(偽)となって、ループを終了します。
ループ途中での脱出¶
この処理を、999 と入力されたら中断するようにしてみましょう。
Pythonのループは、break 文を実行すると中断してループを終了します。ここでは、入力した文字列 text が 999に等しいとき、break文を実行するようにしてみましょう。
counter = 1 # 現在、何回目かを記録する変数
while counter <= 5: # counterの値が5以下なら繰り返す
text = input("数字を入力してください")
# 入力された文字が '999' なら
if text == '999':
# ループを中断する
print("中断します")
break
number = int(text) # 入力した文字列を数値に変換する
print(counter, "回目:", number * number) # 入力した数値の2乗を表示する
counter = counter + 1 # counter の値に 1 を加算する
print("終了しました")
修正した処理では、ループの途中に次のような処理が入っています。
# 入力された文字が '999' なら
if text == '999':
# ループを中断する
print("中断します")
break
input()で入力された文字列が999なら、text == '999'という条件式が真となり、if文の条件が成立します。if文の条件が成立した場合は、if文のブロックで中断しますというメッセージを出力してからbreak文を実行します。break文を実行すると、そのとき実行しているwhileループを中断します。
ループが中断すると、while 文の条件式が False となった場合とおなじように、whileブロックのループの外側に移動して、 print("終了しました") という行を実行します。