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("終了しました")
という行を実行します。