条件式と分岐 で、コンピュータプログラムの三つの制御構造を紹介しました。ここでは最後の制御構造である 反復(ループ) を紹介します。
反復処理は、決まった条件が満たされているあいだは、何度でも同じことを繰り返す、という処理です。たとえば、銀行のキャッシュディスペンサーでお金を引き出すとき、暗証番号を入力して、間違えたらもう一度入力をやり直します。これは反復処理で、手順は次のようになります。
正しい暗証番号が入力されていなければ、以下の処理を繰り返します。
A. 暗証番号を入力します。
引き出す金額を入力します。
お金を受け取ります。
これは、正しい暗証番号が入力されてない という条件が満たされているあいだは、A. 暗証番号を入力します
という処理を繰り返します。正しい暗証番号が入力されれば、正しい暗証番号が入力されてない という条件が満たされなくなり、ループを終了してつぎの処理に移動します。
while文¶
Pythonでは、反復処理は while
文で記述します。
while 条件式:
処理1
処理2
...
while
文は、条件式
が満たされ、結果が True
(真) であるあいだ、処理
を繰り返して実行します。
if文 とおなじように、while
文に続いて条件式を指定します。行の末尾に :
が必要ですので気をつけてください。
次の行から、条件式が成立するあいだ実行する処理を記述します。この処理は、行の先頭にスペース4文字で インデント して記述します。
while 条件式
処理
^^^^
スペースを4文字入力
while
文と、その後に続くインデントされたブロックを、while節 と言います。
while文の例¶
次の例は、finish
と入力されるまで何度でも文字入力を繰り返すプログラムです。
text = "" # text に初期値として "" を設定する
while text != "finish": # text が "finish"ではない間、処理を繰り返す
# 文字を入力する
text = input("finishと入力してください:") # text に文字を読み込む
print(text, "と入力されました。")
print("終了しました")
このプログラムは、関数で文字列を変数 text
が finish
では ない 場合、input()
関数を呼び出してキー入力を受け取り、text
に設定する処理を繰り返します。
プログラムを実行すると、変数
text
に空の文字列""
を設定します。次に、
while
文を実行します。while
文の条件式text != "finish"
は、変数
text
と、文字列'finish'
が等しくないときにTrue
となります。一番最初は、変数
text
に''
が設定されているので、文字列finish
と等しくありません。したがってtext != 'finish'
の値はTrue
となり、while
文はループを実行します。input()
関数を実行し、ユーザが入力した文字列を変数text
に設定します。while
ループ内の処理が終わり、while
文の先頭まで戻ります。再び条件式text != "finish"
を判定しますが、このとき、 変数
text
には 2. でユーザが入力した文字列が入っています。ユーザがfinish
と入力していればtext != 'finish'
の値はFalse
となり、while
ループは終了します。finish
以外なら、もう一度ループを再実行します。
ループが止まらなくなってしまったら¶
while
ループを使ったプログラムは、書き間違えると永久にループを実行し続ける事になってしまいます。
たとえば、次のプログラムはループを終了する条件が成立することがないので、いつまでも終わりません。
while True:
text = input()
print(text)
これが有名な「無限ループ」というやつですね。
Colabでは、こういったプログラムを実行して終了できなくなってしまったら、実行中のセルの左側にあるボタンをクリックすると、中断できます。