while文は基本的にはfor文のように繰り返し処理を実行する構文ですが、繰り返し処理を回し続けるか、ストップするかを条件式で決める事ができます。
if文は条件式毎に真偽を判定し、Trueであれば処理が実行されますが、while文は最初に条件式を設定し、Trueであり続ける限りブロックの処理が実行され続けます。
while 条件式: [スペース]処理
while文を使うと条件式がTrueであり続ける限り、処理を何度も繰り返す事ができます。
見た目はif文と似ていますが、if文では処理を確認したら次に続きますが、while文は処理が行われたらwhile文の先頭に戻るループ処理が行われます。
if文
>>>name = "ベア子" >>>age = 400 >>>if age < 405: >>> print("恐いのかしら?") >>> age += 1 >>>print(age) 恐いのかしら? 401
while文
>>>name = "ベア子" >>>age = 400 >>>while age < 405: >>> print("怖いのかしら") >>> age += 1 >>>print(age) 怖いのかしら 怖いのかしら 怖いのかしら 怖いのかしら 怖いのかしら 405
上のif文とwhile文、どちらもageの値を調べて、405より小さければメッセージを表示し、ageを+1します。
両者似ていますが、実行してみると全然結果が違ってしまいます。
if文は「怖いのかしら」が1回表示され、400 が+1されたのに対し、
while文では「怖いのかしら」が5回表示され、400が+5されました。
if文のコードでは、条件式を調べてTrueなので「怖いのかしら」が1回表示され、age += 1が1度実行されprint(age)に続きました。
while文の方は条件式がFalseになるまで「怖いのかしら」を表示、age += 1の実行ループが続けられました。
5回繰り返したところでage < 405がFalseとなった為、ループを抜けprint(age)が実行されました。
>>>age = 1 >>>while True: >>> print(age) >>> age += 1 1 2 3 4 5 ・ ・ ・
上のwhile文は条件式が永遠にTrueになりますので、ループから抜けることができません。
無限ループを避ける為にbreak文が用いられます。
構文は以下の通りです。
>>>if 条件式: >>>[スペース]break
訳すと、「条件式がTrueであれば、(現在の処理は)終わり。」となります。
>>>age = 1
>>>while True:
>>> print(age)
>>> age += 1
>>> if age == 10:
>>> print(str(age)+"となったので終了します")
>>> break
1
2
3
.
.
.
9
10となったので終了します
最初の無限ループ文にbreak文を挿入しました。
age == 10になった段階でbreakが発動し、while文が終了します。
if節の条件式を満たしたらループ処理を終了させるbreak文に対し、if節の条件式を満たした場合のみ処理をスキップさせるものがcontinue文です。
構文もbreak文と似ており、以下の通りです。
if 条件式: [スペース]continue
訳すと、「条件式がTrueであれば、処理をスキップせよ」です。
>>>age = 0 >>>while age < 10: >>> age += 1 >>> print(age) 1 2 3 . . . 9 10
上は1~10までを順番に表示させるコードです。
ここに偶数を(2の倍数)をスキップさせるcontinue文を挿入します。
>>>age = 0 >>>while age < 10: >>> age += 1 >>> if age % 2 == 0: >>> print("偶数です") >>> continue >>> print(age) 1 偶数です 3 偶数です 5 偶数です 7 偶数です 9 偶数です
偶数(2の倍数)であれば、print(“偶数です”)を実行してその後の処理(print(age))はスキップされていることがわかります。