Python whileループ 基本の使い方と注意点

前回の記事ではif文について学びました。この記事ではforループと並んで使われるwhileループについて紹介します。

この記事を読むことであなたは
・whileループの基本の使い方
・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法を始めとした反復法で使われる機会が多いです。

The following two tabs change content below.
メーカーR&D職 研究開発業務にPythonを使用。 Udemy講師およびKindleで電子書籍を出版。 Udemyでは受講生 約15,000名 Pythonの適用範囲: データ分析、画像処理、統計解析、並列計算、流体解析、深層学習

ABOUT US

メーカーR&D職 研究開発業務にPythonを使用。 Udemy講師およびKindleで電子書籍を出版。 Udemyでは受講生 約15,000名 Pythonの適用範囲: データ分析、画像処理、統計解析、並列計算、流体解析、深層学習