条件式と分岐 で、コンピュータプログラムの三つの制御構造を紹介しました。ここでは最後の制御構造である 反復(ループ) を紹介します。
反復処理は、決まった条件が満たされているあいだは、何度でも同じことを繰り返す、という処理です。たとえば、銀行のキャッシュディスペンサーでお金を引き出すとき、暗証番号を入力して、間違えたらもう一度入力をやり直します。これは反復処理で、手順は次のようになります。
正しい暗証番号が入力されていなければ、以下の処理を繰り返します。
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では、こういったプログラムを実行して終了できなくなってしまったら、実行中のセルの左側にあるボタンをクリックすると、中断できます。