【Python入門】whileで書くループ処理 - サンプルを元に徹底解説
この記事ではPython入門者に向けて、実際に動くサンプルコードを元にwhile文について徹底解説していきます。
この記事ではPython入門者に向けて、実際に動くサンプルコードを元にwhile文について徹底解説していきます。
スキルアップ
2023/02/22 UP
- プログラミング
- SE資格・スキル
- 入門
- Python
Pythonにはループ処理としてwhile文とfor文があります。ある程度処理の回数が決まっているfor文に対し、while文は「条件がある状態になるまで処理を実施する」種類のループ処理になります。
一般的なwhile文の特徴に加え、Pythonにはdo while文がサポートされていないなど、独自の仕様があります。ループ処理はプログラミングの基本となる構文なので、今後Pythonの学習を進める上で避けては通れません。入門段階でwhile文の構造と動作についてしっかりと理解を深めておきましょう。
この記事ではPython入門者に向けて、実際に動くサンプルコードを元にwhile文について徹底解説していきます。
Pythonのwhile文とは
Pythonのwhile文も、一般的なプログラミング言語におけるwhileと同様に、条件式を設定し、条件式が真となる場合は処理を反復して実行する命令です。
Pythonのwhile文の書き方は以下のような形になります。
while 反復条件となる条件式: 繰り返し行なう処理
whileの条件式の最後は必ず:で閉じ、繰り返し行なう処理はインデントします。条件式にはループ処理を繰り返したい場合に「真(true)」となる条件を記述します。Pythonはインデントによってブロックを表現するため、インデントを挿入する習慣を身に着けておきましょう。
それでは実際のコードを見てみましょう。次のサンプルコードはwhile文の基本形に則ったコードになっています。変数iが10未満である場合、現在のiの値を出力し、1を加えて処理の先頭へ戻り、再度処理を実行します。10回処理を繰り返し、変数iが10になった時点で処理は終了します。
i = 0 while i < 10: print(i) i += 1
while文は「条件式が真(true)となる場合は処理を反復する」という命令なので、条件が常にtrueであれば、指定された処理を永遠に反復し続ける無限ループになりますので注意しましょう。このサンプルでは、i += 1 の行を削除すると、iが永遠に0のままなので、無限ループとなります。
なおこの性質を利用して、「while True」という記述を行なうことで意図的に無限ループを作り出すテクニックもあります。しかし無限ループはエラーの原因となるため、必ず終了条件と一緒に運用するように注意しましょう。
do whileはない
Pythonには、C言語系のプログラミング言語がサポートしているdo whileはありません。ただし、同じような処理の書き方は可能です。
次のサンプルコードでは、do whileの「まず実行してから反復の継続条件の判定を行なう」という挙動を再現するため、前項で紹介した無限ループの記述方法を用い、whileの最初で変数iの現在の値を出力してから1を加算して処理を反復しています。
反復の継続条件の判定は、ネストしたifでiを監視し、10以上になった場合はbreakで処理を抜けることで再現します。
i = 0 while True: print(i) if i >= 10: break i += 1
Pythonのwhile文の書き方
それではPythonのwhile文の基礎を理解したところで、実働するコードを見ながら記述方法を解説していきます。while文の書き方と特徴が掴めたら、実際に自分で手を動かし、記述してみましょう。
while文の基本形
while文の条件式では、単純な比較演算だけでなく、配列や辞書を参照することができます。次のサンプルコードでは、dataという配列の値を参照して出力し、data[i]の中に0が出現したら処理を終了します。
ここでは配列dataの4番目の値が0のため、出力は5,2,1となります。
data = [5, 2, 1, 0, 3] i = 0 while data[i] != 0: print(data[i]) i += 1
複数条件でwhile
while文の条件式は複数の条件を設定することが可能です。andやorのような論理演算子を用いて複数の条件式を評価し、反復の継続を判断します。
次のサンプルコードでは、dataという配列の値を参照して出力し、data[i]の中に0か2が出現したら処理を終了します。
ここでは配列データの2番目の値が2のため、出力は5のみとなります。
data = [5, 2, 1, 0, 3] i = 0 while data[i] != 0 and data[i] != 2: print(data[i]) i += 1
breakでwhileを終了する
breakは記述された時点で処理を終了してループを抜ける命令です。無限ループの終了条件などに使用し、whileを適切に停止させます。break以降に記述されている処理は実行されません。
次のサンプルコードでは、dataという配列の値を出力し、値が6以上の場合はbreakでループを抜ける処理を行ないます。
ここでは、配列dataの5番目の値が6のため、出力は5,2,1,4,6となります。
data = [5, 2, 1, 4, 6, 3] i = 0 while data[i] != 0: print(data[i]) i += 1 if i >= 5: break
continueで次のwhileループへ
continueは記述された時点でループ処理の先頭へ戻り、再び処理を実行する命令です。continue以降に記述されている処理は実行されません。
次のサンプルコードでは、dataという配列の値を参照してifで監視し、2だった場合はインデックスを進めてcontinueします。2以外だった場合は値を出力してインデックスを進めます。
ここでは、配列dataの2番目の値が2のため、出力は5,1,0,3となります。
data = [5, 2, 1, 0, 3] i = 0 while True: if data[i] == 2: i += 1 continue print(data[i]) if data[i] == 3: break i += 1
do whileのように処理する方法
前項で解説した通り、Pythonはdo whileをサポートしていません。しかし、do whileと同じ挙動の処理を記述することは可能です。
次のサンプルコードでは、whileでループ処理を開始した時、最初に変数iの現在の値を出力します。続いてネストしたif文を用いて、変数iをインデックスとして配列から抜き出した値が0と等しいか否かを判断します。0であればbreakでループ処理を終了します。0でなければiに1を加算してインデックスを進め、ループ処理の最初に戻ります。
このように処理順を変えることで、do whileと同じ挙動をさせることが可能になります。
ここでは、配列dataの4番目の値が0のため、出力は5,2,1,0となります。
data = [5, 2, 1, 0, 3] i = 0 while True: print(data[i]) if data[i] == 0: break i += 1
whileにelse処理
if文で見るelseは、while文でも使用できます。whileの条件式が真にならない場合、elseの処理を行なうようなwhile文が記述できます。処理の流れと構造としては、while文の条件式が真(true)である間はループ処理を行ない、偽(false)になった時はelseの処理を行なってループ処理を終了します。
次のサンプルでは、変数iをインデックスとしてdataという配列から値を抜き出し、値が0ではない場合は値を出力したあと、iに1を加算してインデックスを進めて処理の先頭へ戻り、再度処理を実行します。0であった場合はelseの処理に進み、999を出力して、ループ処理を終了します。
ここでは、配列dataの4番目の値が0のため、出力は5,2,1,999となります。
data = [5, 2, 1, 0, 3] i = 0 while data[i] != 0: print(data[i]) i += 1 else: print(999)
注意する点として、breakはelseよりも優先されます。そのため、次のようなコードの場合、breakが実行された時点で処理が終了するため、else部分は実行されません。
ここでは、配列dataの4番目の値が0でbreakしてしまうため、出力は5,2,1となります。
data = [5, 2, 1, 0, 3] i = 0 while True: if data[i] == 0: break print(data[i]) i += 1 else: print(999)
Python のwhile文とfor文の使い分け
Pythonのループ処理には、while文とfor文があります。どちらも条件式が真(true)になる場合は処理を繰り返す構文ですが、挙動は異なります。
使い分けのポイントについて、それぞれの特徴を見ながら理解していきましょう。
while文のほうがよい場合
while文のほうが適しているケースは、ループ処理の回数が決定していない場合です。次のサンプルコードでは、変数rにrandom関数で発生させた乱数を代入し、rが0.5よりも大きい場合は処理を中止し、それ以外はrの現在の値を表示します。
random関数を用いた乱数で条件を判断するため、何回目の処理で0.5を上回る数値が出るかはわからないので、このようなケースではwhile文を使用します。
import random while True: r = random.random() if r > 0.5: break print(r)
for文のほうがよい場合
forは処理の回数が決まっている場合に使用します。次のサンプルでは、dataという配列を作成し、配列から1つずつ数字を抜き出して変数numに代入し、文字列を出力しています。またnumが0になった時はbreakでループ処理を終了します。
このように処理する回数が決まっているループ処理にはfor文が適しています。
data = [5, 2, 1, 0, 3] for num in data: if num == 0: break print(num)
whileはPythonの基本!
while文は、実際の開発では条件をTrueとして無限ループにして使用するケースも多いため、continueとbreakの使い方は特に意識してマスターしておくとよいでしょう。無限ループは放置するとエラーの原因となるため、終了条件をしっかりと設定し、breakでループを抜ける処理に処理抜けがないように記述します。
whileの処理はPythonプログラミングで随所に現れるので、whileをマスターすることはPythonでプログラミングを進めていく上で必須といえるでしょう。今回紹介したサンプルコードを動かして書き換えながら、しっかりと理解して使いこなしてください。