前回の記事ではif文について学びました。この記事ではforループと並んで使われるwhileループについて紹介します。
whileループの基本
forループでは繰り返しの回数が予め決まっていました。しかし、場合によっては繰り返し回数が予め決まっていない場合もあります。この場合に使うのがwhileループです。次の擬似プログラムを見てください。
while 条件式:
実行文
whileループを使う事で、特定の条件が満たされるまでループ処理を繰り返すという事が実現できます。条件式の部分は前回、if文で学習した条件式と同じです。次のプログラムはwhileループの最も簡単な例です。
i = 0
while i < 10:
print("current i is :", i)
i += 1
このプログラムでは変数iの値が10未満の間実行されるwhileループで、ループの中では今のiの値とiを1つ増加させる処理を行っています。これくらいシンプルな内容であれば、わざわざwhileループを使うまでもないですが、whileループの基本形はこの形です。このプログラムの実行結果は次の通りです。
実行結果
current i is : 0
current i is : 1
current i is : 2
current i is : 3
current i is : 4
current i is : 5
current i is : 6
current i is : 7
current i is : 8
current i is : 9
breakとの組み合わせ
while文と一緒によく使われるのがbreakです。次のプログラムを見てください。
i = 0
total = 0
threshold = 30
while i < 10:
print("current i is :", i)
i += 1
total += i
if total > threshold:
print(total, " is greater than threshold.")
break
ここでは先ほどのwhileループを少しだけ変更しています。totalという新しい変数にiを足算していき、そのtotalがthreshold(閾値)を超えたらbreakしている事がわかります。このプログラムの実行結果はどうなるでしょうか?
実行結果
current i is : 0
current i is : 1
current i is : 2
current i is : 3
current i is : 4
current i is : 5
current i is : 6
current i is : 7
36 is greater than threshold.
見て分かる通り、iが10以上となる前にwhileループを抜けている事が分かりますね。このように条件が満たされた場合にwhileループを抜けるのがbreakです。
whileループの実際: forループとの使い分け
ここでは実際にwhileループがどう使われるのかについて説明します。科学技術計算ではある残差が閾値以下になるまで計算を繰り返すという計算をする場合があります。
例えば、Newton法を使って方程式を解く場合がそうです。Newton法の詳細はここでは省略しますが、簡単に言えば、ある方程式の近似解を計算し、反復的に近似解を真の解に近づける方法です。Newton法を想定した擬似プログラムは次のようになります。
x = 0.0
threshold = 1e-8
max_iterations = 500
iteration = 0
while err > threshold:
new_x = newton_method(x)
err = new_x - x
x = new_x
iteration += 1
if iteration > max_iterations:
break
このプログラムはNewton法の中身が定義されていないため動きません。イメージ的にはNewton法により新しいxを計算し、err = new_x – xで差を調べ、errが閾値以下になったところでwhileループを抜けています。逆にerrが閾値以下になるまでループする必要があるため、予めループ回数が決まっているforループでは対応できません。
また、whileループの中には先ほど学習したbreakも使われています。実はNewton法は方程式の解が単調でない場合には収束しない場合があります。この為、whileループの最大反復数(max_iterations)を決め、収束しないと判断した場合にはwhileループをbreakしていることに注意してください。こうしてかないと無限ループにハマってしまって抜け出せない事があります。この疑似プログラムの中には今回、学習したwhileループとbreakの両方が使われている事が分かりますね。実際の科学技術計算ではこのように使われますよという紹介でした。
まとめ
この記事ではwhileループについて学習しました。whileループは予めループ回数が決まっていないような場合に有効です。また、breakを使う事で特定の条件を満たしたときにwhileループから抜ける事も出来ます。
while 条件式:
実行文
if 別の条件:
break
科学技術計算ではNewton法を始めとした反復法で使われる機会が多いです。
最新記事 by t-tetsuya (全て見る)
- 【GPyOpt】Python x ベイズ最適化の基本をマスターしよう - 2020年12月29日
- Python print関数の基本の使い方 - 2020年12月10日
- Python関数の書き方の基本 - 2020年12月1日
・forループとwhileループの使い分け
について理解することができます。