Pythonのwhile
文は指定した条件が真である限り繰り返し実行するための制御構造です。
while 条件式: # 条件式が真の間、ここに書かれたコードが実行される
このページではPython初心者向けに、そもそも繰り返し処理とは何か?while文の基本的な構文から、陥りがちな無限ループの罠まで網羅的に解説します。
Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
前提:繰り返し処理とは?
「繰り返し実行」とは、特定のプログラムのコードブロック(つまり、命令の集まり)を何度も実行することを指します。この概念はプログラミングの基本的な要素の1つで、特定のタスクを指定した回数だけ、または特定の条件が満たされるまで実行するために使用されます。
繰り返し実行は主に2つの形式で現れます:「カウント制御ループ」と「条件制御ループ」です。
カウント制御ループ→for
カウント制御ループは「指定された回数だけ何かを行う」というタスクに対応します。
例えば、「5回"こんにちは"と言ってください」と言われた場合、それを実行するには、"こんにちは"と言う行為を5回繰り返す必要があります。
Pythonのfor
文を使ったプログラムでは、以下のように表現します。
for i in range(5): print("こんにちは")
このコードでは、"こんにちは"という文字列を5回表示します。range(5)
は0から4までの数値を生成するので、for
文はこの5回分の数字(つまり5回)を使ってループ(繰り返し)を作ります。
参考 Python:for文 / print関数の使い方
条件制御ループ→while
条件制御ループは、「特定の条件が満たされるまで何かを行う」というタスクに対応します。
このページで学ぶwhile文はこちらの「条件制御ループ」に該当します。
例えば、「お腹が空くまでリンゴを食べ続けてください」と言われた場合、お腹が空くという条件が満たされるまでリンゴを食べ続ける必要があります。
stomach = 0 # お腹の状態を0とする(0は空腹を、10は満腹を表すとします) while stomach < 10: # お腹がまだ満腹でない場合 print("リンゴを食べる") stomach += 1 # リンゴを1個食べるとお腹の状態を1だけ増やす
このコードでは、お腹が満腹になるまで(つまりstomach
が10になるまで)"リンゴを食べる"と表示し続けます。
これらのループは、特定のタスクを指定した回数だけ実行するか、特定の条件が満たされるまで続けるかといった繰り返しの操作をコード化するための非常に重要なツールです。
for文とwhile文の使い分けを押さえたうえで、本題のwhile文の解説に移ります。
Python:while文の使い方
while
文はプログラムの一部を指定した条件が真である限り繰り返し実行するための制御構造です
ある特定の条件が「真:true」の場合に指定した処理を繰り返します。
while
文の基本的な構文は以下の通り。
while 条件式: # 条件式が真の間、ここに書かれたコードが実行される
このループは条件式が偽と評価されるまで無限に続きます。
whileの処理内容と意味を理解できるようにいくつかサンプルコードを記載しておきます。
サンプル ユーザーからの入力を受け付ける
以下の例では、ユーザーからの入力を受け付けてその内容を表示し、特定の文字列(ここでは"quit")が入力されるまで続けるプログラムを作ります。
# 入力待ちのメッセージを表示する message = input("何かを入力してください('quit'で終了): ") # 入力されたメッセージが'quit'でない限りループを続ける while message != 'quit': # 入力されたメッセージを表示する print("あなたが入力したメッセージ: " + message) # 再度、入力待ちのメッセージを表示する message = input("何かを入力してください('quit'で終了): ") # 'quit'が入力されたため、プログラムを終了するメッセージを表示する print("プログラムを終了します") # 例えばユーザーが「hello」「world」最後に「quit」と入力した場合出力は次のようになります。 # あなたが入力したメッセージ: hello # あなたが入力したメッセージ: world # プログラムを終了します
サンプル リストの要素を一つずつ処理する
以下の例では、リストの要素を一つずつ表示していき、リストが空になるまで処理を続けるプログラムを作ります。
# 処理するリストを作成 items = ['apple', 'banana', 'orange', 'peach'] # リストが空になるまでループを続ける while items: # リストから一つ要素を取り出す(pop()はリストの最後の要素を取り出す関数) item = items.pop() # 取り出した要素を表示する print("処理中の要素: " + item) # リストが空になったので、全ての要素を処理した旨のメッセージを表示する print("全ての要素を処理しました") # このコードの出力は以下のようになります # 処理中の要素: peach # 処理中の要素: orange # 処理中の要素: banana # 処理中の要素: apple # 全ての要素を処理しました
while
文は条件が満たされている間は何度でも同じ処理を繰り返すことができるため、一定の条件下で処理をループさせたい場合に非常に有用な構文であることが分かります。
概要を把握したところでwhile文の利点を整理しておきましょう。
Python:while文の利点①:条件が満たされるまでの繰り返し
while
文は指定した条件が満たされている限り、コードを何度でも繰り返し実行できます。これは、特定の条件が満たされるまで処理を続ける必要がある場合に非常に便利です。
例えば、ユーザーが正しいパスワードを入力するまでプロンプトを繰り返し表示するコードは以下のようになります。
correct_password = 'python123' password = input('パスワードを入力してください:') while password != correct_password: print('パスワードが間違っています。') password = input('もう一度、パスワードを入力してください:') print('パスワードが正しく認証されました!')
Python:while文の利点②:不確定な繰り返し回数
while
文は、繰り返しを行う回数が事前に不確定である、または動的に変化する場合にも適しています。
例えば、リストの要素がなくなるまで操作を行い続ける場合には、以下のようなコードを書くことができます。
items = ['apple', 'banana', 'orange'] while items: item = items.pop() print("現在のアイテム:" + item) print('全てのアイテムが処理されました。')
Python:while文の利点③:コードの読みやすさ
while
文を使うと、コードの意図が直感的に理解しやすくなることがあります。ループが「特定の条件が満たされている間、繰り返し実行される」という動作を明示的に示しているからです。
上記の2つ例で説明すると、パスワードが正しく入力されるまでユーザーに入力を促し続ける、またはリストの要素がなくなるまで要素を取り出し続けるという処理の意図が、コードを見ただけで理解できます。
ただし、もちろんwhile文を利用する際に気を付けなければならない点もあります。最後に、while文を利用する際に陥りがちな罠についてご説明します。
Python:while文の注意点① 無限ループ
while
文の条件が偽になるようにプログラムを設計しないと、無限にループが続く可能性があります。
これはプログラムが停止しなくなる「無限ループ」という状況を引き起こし、コンピュータのリソースを消費し続けたり、期待した動作をしなくなったりします。
# 注意:このコードは無限ループを引き起こします # i = 1 # while i > 0: # print(i)
参考 比較演算子
上記のコードでは、iの値が0以下になることはないため、ループが永遠に続いてしまいます。
Python:while文の注意点② ループ条件の更新を忘れない
while
文のループ条件を満たさないように更新するコードを書くことが重要です。これは先ほどの無限ループの危険性と関連しています。
i = 0 while i < 5: print(i) # この行を忘れると無限ループになる i += 1
このコードでは、ループの各反復後にiの値が1増えます。これにより、iが5以上になった時点でループが停止します。
Python:while文の注意点③ 外部からの影響
while
ループの条件が外部の入力や他のプログラムの状態に依存している場合、予期しない動作を引き起こす可能性があります。
例えば、ユーザーからの入力を待つプログラムがあったとします。
message = '' while message != 'quit': message = input("何かを入力してください('quit'で終了): ") print(message)
ユーザーが何も入力せずにエンターを押すと、メッセージは空のままとなり、ループは'quit'が入力されるまで続きます。このような場合、ユーザーからの入力が予想外のものであることを想定し、適切に対応するコードを書くことが重要です。
Python:while文のまとめ
始めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!