while文によるループ処理
while構文は条件式が満たされている(すなわち条件式が Trude と評価されている)間、コードブロックの内容を繰り返し実行します。
while 条件式: 実行するコードブロック
for文を用いたループ と異なり、繰り返し変数もイテラブルオブジェクトもありません。ただ条件式を添えるだけのシンプルな記述です。while文を使って数字を 1 から 10 まで順に表示するコードを書いてみます。
# PYTHON_WHILE_LOOP # In[1] # 1~10 の数字を順番に表示するプログラム # xをint型で定義(初期値は0) x = 0 # xが10未満の間は処理を繰り返す while x < 10: x += 1 # 間隔を開けて横並びにxの値を表示 print(x, " ", end = "") # 1 2 3 4 5 6 7 8 9 10
上のコードの条件式は「 x が 10 未満の間」となっていますが、実行結果を見ると 10 まで表示されています。これは x に 9 が入っているときに、x に 1 を加えて表示するという処理を行なった後で「 x が 10 以上になった」と判断してループを終了しているからです。
while文を用いた条件分枝
while文と if文を組合わせて条件分枝させる例を見てみます。次のサンプルコードを実行すると、100 以下の整数の中から 7 の倍数だけを選んで表示します。
# PYTHON_WHILE_LOOP_CONDITIONAL_BRANCH # In[1] # 7の倍数を表示するプログラム # xをint型で定義(初期値は0) x = 0 # xが100未満の間は処理を繰り返す while x < 100: x += 1 if x % 7 == 0: print(x, " ", end = "") # 7 14 21 28 35 42 49 56 63 70 77 84 91 98
このコードでも、条件式は x < 100 としてあります。
99 に 1 を加えて 7 で割った余りが 0 になるかどうかを処理するからです。
無限ループに要注意!
while文は条件式が True である間は処理を延々と繰り返すので、もし、いつまでもこの条件式が False に切り替わらないようなコードを書くと、無限ループになってしまいます。たとえば次のようなコードです(絶対に実行しないでください!)。
# PYTHON_WHILE_INFINITE_LOOP # In[1] # このコードは絶対に実行しないでください! x = 1 while x >= 1: x += 1 print(x, "", end = "")
このコードでは x の初期値が 1 であり、while文にある「 x は 1 以上」という条件式を満たしています。そしてループの中で x に 1 を加えていくので、この条件式はいつまでも True と評価されて無限ループに陥ってしまいます。ちょっとした不等号の向きの入力ミスなどで、こういうことが起こってしまうので、while文を含むコードを実行するときは何度も注意深く確かめるようにしてください。
breakキーワード
break はループ (繰返し処理) を途中で終了させるキーワードです。for ループ、while ループのどちらでも使えますが、for 構文ではループ範囲を予め指定しているので、どちらかといえば while ループで使用されることのほうが多いでしょう。簡単なサンプルコードを書いてみます。
# PYTHON_BREAK # In[1] x = 0 while x < 10: x += 1 if x == 5: break print(x, " ", end ="") # 1 2 3 4
x の値を 1 ずつ増加させて表示させるプログラムです。
while構文の条件式は「 x が 10 未満の間は続ける」となっていますが、「 x が 5 になったら break する」という if文があるためにループが途中で打ち切られて、数字は「 4 」までしか表示されません。
continueキーワード
continue はループの途中でコードの読み込みを止めて、ループ開始位置まで戻り、再び反復処理を始めるキーワードです。先ほどのサンプルコードで break を continue に置き換えてみると動作の仕組みがよくわかります。
# PYTHON_CONTINUE # In[1] x = 0 while x < 10: x += 1 if x == 5: continue print(x, " ", end ="") # 1 2 3 4 6 7 8 9 10
x の値が「 5 」に達すると、if文 の中の continueキーワードによってコードの読み込みが中断され、ループ開始位置まで戻ります。そして次の行で x に 1 が加えられて「 6 」になるので、今度は if文の条件式をスルーして先に進めます。結果として、x が「 5 」のときだけ表示されないことになります。
コメント