Pythonではループ処理(繰り返し処理)を行うための制御構文としてfor文とwhile文が用意されています。この記事ではその1つであるwhile文の性質や用途、書き方についてみていきましょう。
目次
while文の用途と制御構造
while文は「条件式を判定してTrueである限り処理を繰り返す」というループ構造です。
その性質上、回数が未定の待機処理などに使われます。永遠にTrueになる条件を指定してしまうと無限ループに陥ってしまうので注意しましょう。
while文の記法
while文の記法は次のとおりです。
カウンタ変数の定義 while 条件式: 処理 カウンタ変数の更新
まずカウンタ変数として使用する変数を宣言して初期化し、whileに続けて条件式を記述します。
while文はこの条件式を満たす限り繰り返し処理を行います。
for文と異なり自分でカウンタ変数の更新を記載する必要があるため、この部分を書き忘れると簡単に無限ループに陥ってしまう点には注意が必要です。
数値を順番に表示するコードを書いてみましょう。ただしこちらは標準入力から数値を受け取り、0からその数までを表示してみます。
num = int(input("好きな数字を入力してね")) i = 0 while i < num: print(i) i = i + 1 # ここでカウンタ変数を更新
このコードを実行し、試しに6と入力してみましょう。実行結果は次のようになります。
好きな数字を入力してね6 0 1 2 3 4 5
ちゃんと0から5までの6個の数字を出力することができました。
出力結果を1から6までにしたい場合はprint関数の中身をi + 1 にすればOKです。
このようにwhile文はカウンタ変数や条件式を自分で用意する必要がありますが、ユーザーからデータを入力してもらい、それによって表示結果を変えるなど柔軟な処理が可能です。
ちなみにカウンタ変数を更新する
i = i + 1
ですが省略形として
i += 1
という書き方もできます。よくある表記なので覚えておきましょう。
ループ終了後に処理を追加する方法
while文で同じようにループを抜けた後の処理(条件を満たさなくなった時の処理)を記述するにはfor文と同様elseに続けて記述します。
num = int(input("好きな数字を入力してね")) i = 0 while i < num: print("ピザ", end="") i += 1 else: print("ひじ!")
実行して標準入力から10を入力してみましょう。
ピザピザピザピザピザピザピザピザピザピザひじ!
ちゃんとピザを10回繰り返した後にひじ!と出力されています。
ループを途中で抜ける方法
whileでもループを途中で抜けたい場合にはif文で条件を設定してbreakを使用します。
num = int(input("好きな数字を入力してね")) i = 0 while i < num: if i == 9: print("おっとそこまでだ!") break print("ピザ", end="") i += 1 else: print("ひじ!")
実行して標準入力から20と入力してみましょう。
ピザピザピザピザピザピザピザピザピザおっとそこまでだ!
カウンタ変数iに9が代入されたところでループが中断されているのがわかります。
while文でもbreakでループを抜けた場合はelseに続くコードブロックは実行されません。
ループの途中をスキップする方法と注意点
while文でcontinueを使う場合はちょっとだけ注意点があります。
というのもcontinueの前にもカウンタ変数を更新する処理を入れなければ条件式の判定がTrue→スキップ→条件式の判定がTrue→という無限ループに陥ってしまうのです。
i = 0 while i < 5: if i == 2: i += 1 continue print(i) i += 1
このようにcontinueの前にも必ずカウンタ変数を更新する処理を入れてあげましょう。