2020年3月21日土曜日

【while文】繰り返し処理

 for文と並んで繰り返し処理を実行するwhile文を説明する。



1. while文の基本形

 while文は条件式がTrueの間処理を実行する。処理はインデント(通常半角スペース4つ分)して記述する。

while 条件式:
    処理


for文との違いは以下の通り。
for文・・・rangeやイテラブルオブジェクトで指定した回数処理を繰り返す
while文・・・条件式がFalseになるまで処理を繰り返す



 次の例ではxの2乗が100より小さい間条件式がTrueとなり、xを出力しxを1つ増やす処理が繰り返される。xが10になると2乗が100となり条件式がFalseとなるため処理が実行されずにループを抜ける。

x = 1
while x * x < 100:
    print(x)
    x += 1

実行結果

1
2
3
4
5
6
7
8
9


2. breakによるwhileループの抜け出し

whileループ内で特定の条件になった場合ループを抜ける場合breakを使う。
下の例ではif文の条件式2がTrueの場合breakが実行され続く処理2を実行せずループを抜ける。

while 条件式1:
    処理1
    if 条件式2:
        break
    処理2


次の例ではxが5になるとbreak文が実行され以降の処理を実行せずwhileループを抜ける。

x = 1
while x * x < 100:
    if x > 5 :
        break
    print(x)
    x += 1

実行結果

1
2
3
4
5


3. else文によるFalse時の処理

 else文はwhie文の条件式がFalseな場合の処理を記述する。
次の例では条件式がTrueの場合は処理1が、条件式がFalseの場合は処理2が実行される。

while 条件式:
    処理1
else:
    処理2


ただしwhile文は条件式がFalseとなるとループを抜け続く処理を実行する、つまりelseを使わなくても処理2が実行されるので、上の使い方はあまり意味がない。

while 条件式:
    処理1
処理2


else文はbreak文と組み合わせることでwhileループを正常終了した場合とbreakした場合で処理を変えることができる。
breakでループを抜け出した場合は処理2が実行されない。一方、条件式1がFalseとなってループを抜けた場合処理2が実行される。

while 条件式1:
    処理1
    if 条件式2:
        break
else:
    処理2


4. continueによるwhileループのスキップ

 continueを使うと条件が成立した際に以降の処理をスキップし次のループに移る。continueif文と組み合わせifブロック内に書く。
条件式2がTrueならcontinueが実行され処理2が飛ばされ次のループに移る(処理1を記述するかどうかは任意)。

while 条件式1:
    (処理1)
    if 条件式2:
        continue
    処理2


次の例ではif文の条件式でxが偶数かどうかを調べており偶数の場合はprint(x)をスキップし次のループに移る。

x = 0
while x * x < 100:
    x += 1
    if x // 2 * 2 == x:
        continue  
    print(x)

実行結果

1
3
5
7
9


5. 無限ループ

 ゲームで画面をスクロールさせる場合のように同じ処理を無限に続ける場合while文で条件式そのものをTrueとすることで無限ループ(メインループ)を作る。
条件式自体がTrue、よって条件式は常に成立(True)するのでいつまでも処理が実行され無限ループとなる。

while True:
    処理


ただしこのままだとプログラムが動いたまま終わらないため、break文と組み合わせある条件でループを抜け出すようにする。
次の例ではxが10になるとbreak文が実行され無限ループを抜け出す。

x = 1
while True:
    if x == 10:
        break
    print(x)
    x += 1

実行結果

1
2
3
4
5
6
7
8
9


6. リファレンス

Python 言語リファレンス > 8. 複合文 (compound statement) > 8.2. while 文

使用バージョン:Python 3.7.0

0 件のコメント:

コメントを投稿