while文で繰り返し処理を組もう

while文で繰り返し処理を組もう

Pythonにおいて、繰り返し処理を行う代表的な方法のひとつにwhile文があります。while文は「ある条件が成り立っている限り処理を繰り返す」という仕組みを持ち、条件がFalseになったタイミングでループが終了します。

for文と比べると、while文は「いつまで繰り返すか決まっていない」ケースでよく使われます。例えば、ユーザーの入力待ちを続けるような場合や、一定の条件を満たすまでゲームロジックをループさせたい場合など、条件の判定によって処理を継続するかどうかを動的に決めるシチュエーションで有用です。

while文の基本構文

まずはwhile文の基本的な書き方を確認してみましょう。構文は以下のようになります。


while 条件式>:
    # 条件式がTrueの間、繰り返す処理をここに書く

条件式がTrueである間はwhileブロック内の処理を繰り返し、Falseになった瞬間にループが終了します。最もシンプルな例として、変数を使ったカウンタ処理を見てみましょう。


counter = 0
while counter  5:
    print("counter:", counter)
    counter += 1  # 1ずつインクリメントする

上記の例では、counter < 5の条件がTrueである間、while文の内部が繰り返し実行されます。カウンタが0から始まり、5未満の値を持つうちはprintが呼ばれ、最終的にcounterが5になるとcounter < 5がFalseとなりループが終了します。

breakとcontinue

while文では、for文と同様にbreakcontinueを使用することができます。

  • break: ループを強制的に抜ける
  • continue: その回の処理をスキップして次の繰り返しに移る

例えば、ユーザーが「quit」と入力したらループを強制終了するロジックなどにbreakを活用できます。continueは「ある条件のときは処理を飛ばして、すぐに次の繰り返しに進みたい」場合に便利です。

ユーザー入力を使った簡単なゲーム風ロジック

実際に、while文の特性を活かした「ゲーム風ロジック」の例を示します。ここでは、プレイヤーが正しい合言葉を入力するまで繰り返す仕組みを作り、正解ならループを抜けるというシナリオを考えましょう。


secret_word = "python"
user_input = ""

print("ゲーム開始!正しい合言葉を当てるまで無限に聞かれます。")
while True:
    user_input = input("合言葉を入力してください: ")
    if user_input == secret_word:
        print("正解です!ゲームを終了します。")
        break  # whileループを抜ける
    else:
        print("不正解です。もう一度試してください。")

このスクリプトでは、「正解を入力するまでループし続ける」という使い方をしています。while Trueはその名の通り常にTrueな状態のため無限ループになり、何らかの条件を満たした時点でbreakを使って抜けるのが典型パターンです。

条件が変化しないままのwhileループに注意

while文を利用する際に最も気をつけたいのが、条件が変化せず無限にループが続いてしまうという状況です。例えば、以下のようにカウンタを更新しないコードを書くと、延々と処理が終わりません。


counter = 0
while counter < 5:
    print("counter:", counter)
    # counter += 1 を書き忘れた場合、counter はずっと0のまま
    # このため、counter < 5 が永遠にTrueとなりループが終わらない

こういったバグを避けるためにも、ループの条件がいつ変化しているのかを必ず確認する癖をつけましょう。「カウンタをインクリメントし忘れていないか」「条件分岐でループを抜ける手段があるか」などを定期的にチェックするのが大切です。

while文のバリエーション: while-else構文

Pythonのユニークな機能として、while文にelse節を組み合わせることができます。これは「whileループが正常に最後まで実行された場合のみ実行されるブロック」を示します。breakなどで途中で抜けると、elseのブロックは実行されません。


counter = 0
while counter < 5:
    print("counter:", counter)
    counter += 1
else:
    print("ループが最後まで実行されました。")

上記の例では、カウンタが5以上になってcounter < 5がFalseとなり、ループが終了するとelseの処理が実行されます。もしループ中にbreakが呼ばれていた場合はelse節はスキップされるため、エラーが起きたかどうかや、特定の条件で中断されたかどうかを判定する手段として利用可能です。

while文を使った応用例: 簡単な当てゲーム

次は、数値当てゲームの例をもう少し詳しく見てみましょう。プレイヤーはランダムに生成された数字を当てるまで繰り返し入力し、正解時には何回目で当たったかを表示してループを終了する、といったロジックです。


import random

answer = random.randint(1, 10)  # 1~10のランダムな整数
attempts = 0

print("数当てゲームを開始します!1~10の数字を当ててください。")

while True:
    guess = input("予想した数字を入力してください (終了するには 'q' と入力): ")

    if guess.lower() == "q":
        print("ゲームを終了します。答えは", answer, "でした。")
        break  # 途中終了

    # 入力が数字であることを前提に処理(エラーハンドリングは省略)
    guess = int(guess)
    attempts += 1

    if guess == answer:
        print("正解です!", attempts, "回目で当たりました!")
        break  # ゲームクリア
    elif guess  answer:
        print("もっと大きい数字です。")
    else:
        print("もっと小さい数字です。")

ここでもwhile Trueで無限ループを構成し、breakを使ってループを脱出するパターンを採用しています。ゲームが進行している間はattemptsで回数をカウントし、どの段階で当たったのかを記録しています。数字が当たるまで繰り返す仕組みや途中でやめたいときは「q」を入力して強制的に抜けられる設計が、while文ならではの汎用性をうまく活かした例です。

while文とfor文の使い分け

Pythonでループ処理を書くとき、多くの方が最初に学ぶのはfor文かもしれません。for x in range(5):のように回数が明確に定まっている場合、for文は非常にシンプルで読みやすい構文を提供します。一方、回数が決まっていない繰り返し、特にユーザーの入力不定の条件が絡む場合はwhile文の出番です。

「いつまで繰り返すのか」「繰り返しの打ち切り条件はどうなるのか」という視点をもとに、while文かfor文か、あるいは両方の組み合わせかを選択すると良いでしょう。

まとめ

while文は「条件を満たす限り繰り返す」という特徴を持ち、カウンタの制御やユーザーの入力を活用したゲームロジック、条件が変化するまで待ち受ける処理など、さまざまな場面で応用できます。特に以下のポイントは初心者のうちからしっかり押さえておきたい部分です。

  • while文の基本構文: while 条件式:
  • 条件式がTrueの間のみループが続く。Falseになるとループ終了
  • breakcontinueの使い方
  • while Truebreakを組み合わせた無限ループの管理
  • 条件が変化しないままループし続けないように注意する
  • while-else構文でループ完了時の追加処理が書ける

本記事のサンプルコードを実行しながら、実際に「どのタイミングでループが終わるのか」「breakがどう働くのか」を試してみるとより理解が深まるはずです。慣れてきたら、さらに複雑なゲームやインタラクティブなコンソールアプリなどを作ってみると良いでしょう。while文の使いこなしは、条件制御を自在に操るための大きな一歩となります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です