【Python】while文を使った繰り返し処理の書き方を徹底解説

・Pythonのwhile文の基本的な使い方が知りたい
・繰り返し処理の具体的な書き方が知りたい

という方に向けた記事になります。

Pythonのwhile文は、条件に応じて処理を繰り返したい場面で使われる重要な制御構文です。しかし、「for文との違いが分からない」「無限ループになりそうで不安」「elseやbreakの使いどころが理解できない」…と詰まることがあります。

そこで本記事では、「while文を使った繰り返し(ループ)処理の実践的な使い方、for文との違い、無限ループが起こる原因と対策」について詳しく解説します。

ななみ

繰り返し処理は便利でよく使うので、while文は使いこなせるように頑張りましょう!

目次

Pythonのwhile文とは?繰り返し処理の基本動作

Pythonではwhile文を使って「特定の処理を繰り返す(ループする)」ことができます。

指定した条件式を満たす場合に同じ処理を繰り返し実行したい場合に使います。

ここでは、while文の基本的な書き方とfor文との違いについて見ていきます。

while文の役割と繰り返し処理の仕組み

Pythonのwhile文は、指定した条件式がTrueである間、同じ処理を繰り返し実行する制御構文です。

繰り返し回数を事前に決める必要はなく、「条件が成立しているかどうか」を基準に処理が継続される点が特徴です。そのため、ユーザー入力を待つ処理や、特定の状態になるまで処理を続けたい場面で多く使われます。

Pythonの公式ドキュメント:8.2. while 文

処理の流れは、①条件式を評価し、②条件式が「True」であればwhileブロック内の処理が実行されます。③処理が終わると再び条件式が評価され、Falseになった時点で繰り返しが終了します。

ななみ

条件式がずっとTrueだと繰り返し処理が終了せず、無限ループが発生するので注意が必要です。

while文の基本構文と書き方

Pythonのwhile文は、非常にシンプルな構文で記述できます。基本的な書き方は以下のとおりです。

while 条件式:
    繰り返し実行する処理

条件式には、TrueまたはFalseを返す式を記述します。条件式がTrueである限り、インデントされたブロック内の処理が繰り返されます。

ななみ

インデントはPythonにおいて文法上の意味を持つため、必ず半角スペース4つで揃える必要があります。

よく使われる例として、カウンタ変数を使ったwhile文があります。

i = 0
while i < 4:
    print(i)
    i += 1

# 出力結果
# 0
# 1
# 2
# 3

この例では、変数iが4未満である間、処理が繰り返されます。ループ内でiを更新しているため、変数iが4になったときに条件式がFalseとなり、処理が終了します。

while文とfor文の違い

while文とfor文はどちらも繰り返し処理に使われますが、用途と考え方が異なります。

for文は、リストやrangeなど「回数や要素数があらかじめ決まっている繰り返し」に適しています。一方、while文は「条件が満たされている間、繰り返す」処理に向いています。

  • for文:指定した回数(リストの要素数など)だけ繰り返し処理を行う
  • while文:条件式に当てはまる場合のみ繰り返し処理を行う

例えば、0から4までの数値を出力する処理はfor文の方が簡潔に書けます。

for i in range(5):
    print(i)

同じ処理をwhile文で書くと、条件式と変数更新を明示的に記述する必要があります。そのため、単純な回数指定の繰り返しではfor文が推奨されます。

一方、ユーザー入力を受け取って特定の値が入力されるまで処理を続ける場合など、終了条件が実行時に決まる処理ではwhile文が適しています。

つまり、回数が決まっているならfor文、条件次第で終了するならwhile文、という使い分けが基本です。

for文の詳しい使い方は以下の記事で解説しています!
>>【Python】for文を使った繰り返し処理の書き方を徹底解説

あわせて読みたい
【Python】for文を使った繰り返し処理の書き方を徹底解説 ・Pythonのfor文の基本的な使い方が知りたい・繰り返し処理の具体的な書き方が知りたい という方に向けた記事になります。 Pythonの基本的な文法は理解してきたけど、fo...

Pythonのwhile文の基本的な使い方

Pythonのwhile文の基本的な書き方について解説しました。ここからは、実際によく使われるwhile文の処理についてサンプルコードを用いて確認していきます。

カウンタ変数を使った繰り返し処理や、while-else文、複数条件を指定する方法を丁寧に説明します。

条件式がTrueの場合に繰り返し処理を行う

while文は、条件式がTrueである間だけ処理を繰り返します。

そのため、条件式の評価結果(True or False)が処理の継続・終了を左右します。条件式には比較演算子(<、>、==など)や論理演算子を用いるのが一般的です。

代表的な例として、カウンタ変数を使った繰り返し処理が挙げられます。

count = 1
while count <= 3:
    print(count)
    count += 1

# 出力結果
# 1
# 2
# 3

このコードでは、変数「count」が3以下となる(Trueの)あいだ、print処理が実行されます。ループ内で変数「count」をプラスしているため、最終的に条件がFalseとなり、while文は正常に終了します。

条件式に関係する変数を必ずループ内で更新することが重要です。更新がなければ条件は変化せず、無限ループにつながります。

また、条件式は毎回ループの先頭で評価されるため、初回からFalseの場合は処理が一度も実行されません。この挙動を理解しておくと、意図しない未実行を防げます。

while-else文が実行される条件と注意点

Pythonのwhile文には、あまり知られていないelse句を組み合わせた構文があります。while-else文は、while文が正常終了した場合のみ、elseブロックが実行されるという特徴を持っています。

基本構文は次のとおりです。

while 条件式:
    繰り返しされる処理
else:
    繰り返し終了後の処理

elseが実行されるのは、条件式がFalseになってループが終了した場合です。一方、break文によってループが途中終了した場合、elseブロックは実行されません。

Pythonの公式ドキュメント:4.5. ループの else 節

count = 0
print('ループ処理を開始')
while count < 5:
  print(count)
  count += 1
else:
  print('ループ処理を終了')

# 出力結果
# ループ処理を開始
# 0
# 1
# 2
# 3
# 4
# ループ処理を終了

このコードでは、変数「count」が5未満となる(Trueの)あいだ、whileブロックにある処理が実行されます。ループ内で変数「count」をプラスし5になったときに条件式がFalseとなり、elseブロックの処理が実行されます。

特定の値が見つからなかった場合にだけ処理を行いたい場面では、while-else文が有効です。ただし、可読性の観点から、elseの意味を理解していない読者には意図が伝わりにくいこともあるため、コメント文の適切な挿入が重要となります。

複数条件を指定する方法

while文では、論理演算子を使うことで複数の条件を組み合わせて指定ができます。

主に使用されるのは「andとor」です。andはすべての条件がTrueのときにTrueとなり、orはいずれか一つがTrueであればTrueになります。

  • and:条件式のすべてがTrueのときにTrueと判定
  • or:条件式のいずれか一つがTrueであればTrueと判定
x = 0
while x < 10 and x % 2 == 0:
    print(x)
    x += 2

# 出力結果
# 0
# 2
# 4
# 6
# 8

この例では、「xが10未満」かつ「xが偶数」である間、処理が繰り返されます。条件が複雑になるほど、可読性が低下しやすくなるため、条件式はできるだけ簡潔に書くことが望ましいです。

また、条件が増えすぎる場合は、条件式を変数に代入してからwhile文で使う方法も有効です。これにより、コードの意味が明確になり、保守性も向上します。

Pythonのwhile文で無限ループが起こる原因と対策

Pythonのwhile文では、条件式がずっと「True」の場合、繰り返し処理が終了されず「無限ループ」になります。

ここでは、while文で無限ループが起こる原因と、無限ループの解消方法について解説します。

条件式が変化しないことで無限ループになる例

無限ループは、条件式が常にTrueのまま変化しない場合に発生します。多くのケースでは、条件式に関係する変数を更新し忘れていることが原因です。

i = 0
while i < 5:
    print(i)

このコードでは、変数iの値がずっと「0」で一切変わらないため、条件式「i < 5」は常にTrueとなり、処理が終了しません。

対策としては、条件式に使っている変数がループ内で確実に変化しているかを必ず確認することが重要です。

また、条件式そのものが誤っている場合も無限ループの原因になります。比較演算子の書き間違いや、意図しない論理演算子の使用によって、Falseになるはずの条件が成立し続けるケースもあります。

ななみ

ループ前後で変数の値を出力し、処理の流れを確認することでミスを減らせます!

意図的に無限ループを作る方法と使いどころ

無限ループは必ずしも悪いものではなく、意図的に使用する場面も存在します。代表例が、ユーザー入力を継続的に受け付ける処理や、サーバーの常駐処理などです。

意図的な無限ループは、次のようにTrueを条件式に指定して記述します。

while True:
    command = input("コマンドを入力してください:")
    if command == "exit":
        break

このコードでは、条件式が常に「True」のため、無限ループとなりますが、コマンド入力で「exit」と入力した場合に処理を終了するようになっています。

このように、条件式を常にTrueにし、break文によって明示的に終了させる構成が一般的です。終了条件がコード上で明確になるため、可読性の面でも問題ありません。

重要なのは、必ず抜け道(break)を用意することです。終了条件が存在しない無限ループは、プログラムを停止できなくなり、システム負荷の原因にもなります。

Pythonのwhile文で使える制御構文

Pythonでは、while文の処理を途中で終了したり、スキップしたりする制御構文があります。

ここでは、break文・continue文の基本的な使い方について解説します。

break文で繰り返しを途中で終了する

break文は、while文の繰り返し処理を途中で強制的に終了するための制御構文です。条件式の評価結果に関係なく、breakが実行された時点でループを抜けます。

i = 0
while i < 10:
    if i == 5:
        break
    print(i)
    i += 1

# 出力結果
# 0
# 1
# 2
# 3
# 4

このコードでは、変数iが5になった時点でループが終了します。breakは、特定条件を満たしたら処理を止めたい場合に非常に有効です。

ただし、breakを多用すると処理の流れが追いにくくなることがあります。そのため、終了条件は可能な限り条件式に含め、breakは補助的に使うのが望ましい設計です。

break文の詳しい使い方は以下の記事で解説しています!
>>【Python】for/while文でループを抜けるbreakの使い方を解説

あわせて読みたい
【Python】for/while文でループを抜けるbreakの使い方を解説 ・Pythonのfor文でbreakを使う方法が知りたい・breakが思った場所で動作しなくて困っている という方に向けた記事になります。 Pythonの基本的な文法は理解してきたけど...

continue文で特定の処理をスキップする

continue文は、現在のループ処理を中断し、次のループへ進むための制御構文です。continue以降の処理は実行されず、条件式の再評価に移ります。

i = 0
while i < 5:
    i += 1
    if i == 3:
        continue
    print(i)

# 出力結果
# 1
# 2
# 4
# 5

このコードでは、変数iが3のときだけprint処理がスキップされます。continueは、特定条件のデータを除外したい場合などに有効です。

注意点として、continueを使う場合でも、変数の更新処理が必ず実行される位置にあるかを確認する必要があります。更新処理を飛ばしてしまうと、無限ループの原因になります。

まとめ:Pythonのwhile文を使って繰り返し処理を書けるようになろう

Pythonのwhile文は、条件に応じて処理を繰り返したい場合に欠かせない制御構文です。基本構文とfor文との違いを理解すれば、どの場面で使うべきか判断できるようになります。

一方で、条件式の設計を誤ると無限ループを引き起こすため、変数の更新や終了条件の確認が重要です。breakやcontinueを正しく使えば、より柔軟な制御も可能になります。

まずは簡単なカウンタ処理から練習し、少しずつ実践的なwhile文に慣れていくことが、理解への近道です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次