『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

while文によるループ処理

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 」のときだけ表示されないことになります。

コメント