次に「繰り返し」処理を行う別の方法として while文について解説します。
Pythonの繰り返し処理にはfor文というものもあります。 ではwhile文とfor文は何が違うのでしょうか? 両者の違いは、ループの終了条件です。 以下のように、while文は条件を満たすかどうかをループの基準にしており、条件がtrueの間は処理を繰り返し続けます。
-
for文:指定された回数繰り返すと終了する
-
while文:条件を満たさなくなったら終了する
while文は条件式が真の間、続くブロック内の処理を繰り返します。
while 条件:
繰り返しおこなう処理
例えば、5回処理を繰り返したい場合は以下のように記述します。
i = 0
while i < 5:
print(i)
i += 1このコードの実行結果は以下のとおりです。 変数iが5より小さいことを条件に、ループの中で変数iに1を加算(インクリメント)しています。
0
1
2
3
4
条件が真となった場合、その後に記述されたブロックの中の文を順に実行します. 複数の文を実行させたい場合にはブロック内に記述してください.
while 条件:
条件式が真の時に実行する文1
条件式が真の時に実行する文2
条件式が真の時に実行する文3
次のような例で考えてみます。
num = 0
while num < 2:
print("num = " + str(num))
print("End")この時実行される流れは次のようになります。
1) 変数 num に 0 を代入
2) while 文の条件式を評価。変数 num は 2 より小さいので条件式は真
3) 変数 num の値を出力
4) ブロックの最後まで達したので再度 while 文の条件式を評価
5) 変数 num は 2 より小さいので条件式は真
6) 変数 num の値を出力
7) (4)から(6)を無限に繰り返し実行
このように while 文は条件式を評価し、真であればブロック内の処理を実行し再度条件式の評価へ戻ります。 今回の例ではブロック内で条件式が変化するような処理がないため、繰り返しが無限に繰り返されてしまいます。
while 文の繰り返し処理が 1 回実行されるたびに変数 num の値が変化しています。 その結果 while 文の条件式は3回目で偽となり while 文は終了します。
while文の無限ループとは、処理の繰り返しの中で条件を満たし続けることによって起こります。 上記のコードを例に、以下のように書くと無限ループとなります。
i = 0
while i < 5:
print(i)このコードは、ループの最後に変数iをインクリメントする処理が抜けています。 すると、何度ループしても変数iの値が0のままであるため、永遠にループが終わらず無限ループとなります。 このように、while文を書くときにはどこかでループを抜ける記述をするよう気を付けてください。
while文を使っていると、ループの途中でループから抜け出したいという場面がでてきます。 そんなときに使うのがbreak文です。 break文は、「配列の要素を調べて特定の条件に合うものがあればループを終了する」といった処理を実装する際などに役に立ちます。
while 条件:
if 条件:
break
例として、様々な数値を調べ50より大きいものを見つけたらループを抜ける処理を書いてみます。
numbers = [2, 34, 52, 23, 49]
i = 0
while i < len(numbers):
if numbers[i] > 50:
print("50より大きい数字がありました。")
break
i += 1forループと同じく、リストはwhileループも利用できます。
それではこの性質を利用して for ループからwhile ループを作ってみましょう.
コード 06_while_exercise.py を修正して,結果が出力されるようにしましょう.
ヒント:
for k in range(4)は、4回を繰り返して、ループ終了のため、インクリメント方法で設定すると、forループからwhileループを作成できます.
次のリストの要素にある 'キリン' を見つけたらwhileループを終了しましょう.
while ループと if 文をうまく使ってください.
A = ['ワニ', 'トラ', 'ゴリラ', 'イヌ', 'ウサギ', 'カモシカ', 'キリン', 'クジラ']ヒント:
if文を使って,リストAの要素ごとに 「'キリン'と等しいかどうか」を判定して,等しい場合にbreakを利用してwhileループを終了します.
次のリストの要素にある 'アザラシ' の個数を数えましょう.
また、'カピバラ' を見つけましたら、ループを終了しましょう.
while ループ, if 文, else 文をうまく使ってください.
必要があれば、for ループも使いいただけます.
A = ['アザラシ', 'キツネザル', 'カンガルー', 'アザラシ', 'アカギツネ', 'アザラシ', 'キツネ', 'グアナコ', 'ゴリラ', 'ゴリラ', 'クマ', 'シカ', 'サイ', 'カピバラ']なお、'アザラシ' の個数を表示し、 終了の時に 'カピバラ' 見つけました終了します とループ終了して表示する.