while文で条件付き繰り返しを学ぼう

学習の目標

本章では、以下の内容を学習します。

  • while文を使った条件付き繰り返し処理の基本概念を理解する
  • for文とwhile文の違いと使い分けを学ぶ
  • 条件が満たされる間の繰り返し処理を習得する
  • 数当てゲームの作成方法を学ぶ
  • ユーザー入力による繰り返し制御を理解する

はじめに

これまでにfor文を使った繰り返し処理を学びました。for文は「指定した回数だけ」や「リストの要素数だけ」といった、繰り返し回数が決まっている場合に便利でした。

しかし、プログラムを作っていると「条件が満たされている間だけ繰り返したい」という場面があります。例えば、「正しいパスワードが入力されるまで繰り返し入力を求める」や「ゲームでプレイヤーが諦めるまで続ける」といった場合です。

このような「いつ終わるかわからない繰り返し」を実現するのがwhile文です。while文は「〜している間」という意味で、指定した条件が真(True)である限り、処理を繰り返し続けます。

while文の基本構文

while文の基本的な書き方を見てみましょう。 VS Codeでwhile_basic.pyというファイルを作成し、以下のコードを入力してください。

# 1から5まで表示(while文版)
count = 1

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

print("繰り返し終了")

このプログラムを実行すると、以下のような結果が表示されます。

1
2
3
4
5
繰り返し終了

このwhile文の構造を詳しく見ていきましょう。

まずcount = 1で変数を初期化しています。この変数は繰り返しの条件判定に使われます。

while count <= 5:の部分が条件式です。この条件が真(True)である限り、以下のインデントされた処理が繰り返されます。

処理の中でcount = count + 1により変数の値を変更しています。これがないと条件がずっと真のままになり、無限に繰り返してしまいます。

条件が偽(False)になると、while文の後の処理に進みます。

for文とwhile文の違い

同じ結果をfor文で書くとどうなるでしょうか。比較してみましょう。

VS Codeでfor_vs_while.pyというファイルを作成し、以下のコードを入力してください。

# for文を使った場合
print("for文:")
for i in range(1, 6):
    print(i)

print("\nwhile文:")
# while文を使った場合
count = 1
while count <= 5:
    print(count)
    count = count + 1

実行すると、両方とも同じ結果が表示されます。

for文:
1
2
3
4
5

while文:
1
2
3
4
5

では、どのように使い分けるのでしょうか。

for文は繰り返し回数が決まっている場合や、リストの全要素を処理したい場合に適しています。

while文は条件によって繰り返しを制御したい場合、特に「いつ終わるかわからない」処理に適しています。

ユーザー入力による繰り返し制御

while文の特徴をより活かした例を見てみましょう。ユーザーが「終了」と入力するまで繰り返し処理を続けるプログラムを作成します。

VS Codeでuser_input_loop.pyというファイルを作成し、以下のコードを入力してください。

print("何か言葉を入力してください('終了'で終わります)")

while True:
    user_input = input("入力: ")
    
    if user_input == "終了":
        print("プログラムを終了します")
        break
    
    print(f"あなたが入力したのは: {user_input}")

print("ありがとうございました")

このプログラムでは、while True:という書き方を使っています。Trueは常に真なので、一見すると無限ループになりそうですが、break文を使って適切なタイミングでループから抜け出しています。

実行すると、以下のような対話ができます。

何か言葉を入力してください('終了'で終わります)
入力: こんにちは
あなたが入力したのは: こんにちは
入力: Python楽しい
あなたが入力したのは: Python楽しい
入力: 終了
プログラムを終了します
ありがとうございました

ユーザーが「終了」と入力するまで、何度でも入力を受け付けることができます。このような処理は for文では書くことができません。

数当てゲームを作ってみよう

while文を使った実用的な例として、数当てゲームを作成してみましょう。コンピュータが1から10までの数字を一つ決めて、プレイヤーがその数字を当てるゲームです。

VS Codeでnumber_guess_game.pyというファイルを作成し、以下のコードを入力してください。

# 数当てゲーム
import random

# コンピュータが1から10の数字を選ぶ
secret_number = random.randint(1, 10)
print("数当てゲームを始めます!")
print("1から10までの数字を考えました。当ててみてください。")

まず、ゲームの準備をします。random.randint(1, 10)で1から10までのランダムな数字を生成し、secret_numberに保存します。

次に、プレイヤーの入力を受け付ける部分を追加しましょう。同じファイルに以下を追加してください。

# プレイヤーの挑戦
attempts = 0  # 挑戦回数をカウント

while True:
    try:
        guess = int(input("予想する数字を入力してください: "))
        attempts = attempts + 1
        
        if guess == secret_number:
            print(f"正解です! {attempts}回で当てました!")
            break
        elif guess < secret_number:
            print("もっと大きい数字です")
        else:
            print("もっと小さい数字です")
            
    except ValueError:
        print("数字を入力してください")

このゲームでは、プレイヤーが正解するまで繰り返し続けます。また、try-exceptを使って数字以外が入力された場合のエラー処理も行っています。

実行すると、以下のようなゲームが楽しめます。

数当てゲームを始めます!
1から10までの数字を考えました。当ててみてください。
予想する数字を入力してください: 5
もっと大きい数字です
予想する数字を入力してください: 8
もっと小さい数字です
予想する数字を入力してください: 7
正解です! 3回で当てました!

条件による繰り返し制御

while文では、様々な条件を使って繰り返しを制御できます。いくつかの例を見てみましょう。

VS Codeでwhile_conditions.pyというファイルを作成し、以下のコードを入力してください。

# パスワード認証システム
correct_password = "python123"
attempts = 0
max_attempts = 3

print("パスワード認証システム")

while attempts < max_attempts:
    password = input("パスワードを入力してください: ")
    attempts = attempts + 1
    
    if password == correct_password:
        print("認証成功!システムにアクセスできます。")
        break
    else:
        remaining = max_attempts - attempts
        if remaining > 0:
            print(f"パスワードが間違っています。あと{remaining}回挑戦できます。")
        else:
            print("認証に失敗しました。アクセスが拒否されました。")

このプログラムでは、最大3回までパスワード入力の機会を与えています。正しいパスワードが入力されるか、3回失敗するまで繰り返されます。

実行すると、以下のような結果になります。

パスワード認証システム
パスワードを入力してください: abc
パスワードが間違っています。あと2回挑戦できます。
パスワードを入力してください: 123
パスワードが間違っています。あと1回挑戦できます。
パスワードを入力してください: python123
認証成功!システムにアクセスできます。

while文使用時の注意点

while文を使用する際には、無限ループに注意する必要があります。

VS Codeでinfinite_loop_example.pyというファイルを作成し、以下のコードを見てみましょう(実行はしないでください)。

# 無限ループの例(実行しないこと!)
count = 1
while count <= 5:
    print(count)
    # count = count + 1  # この行がコメントアウトされている

このコードでは、countの値が変更されないため、条件count <= 5が常に真のままになり、無限に繰り返してしまいます。

無限ループを避けるためには、以下の点に注意しましょう。

  • ループ内で条件に関わる変数を適切に更新する
  • break文を使って適切なタイミングでループから抜ける
  • 条件式が最終的に偽になることを確認する

もし無限ループが発生してしまった場合は、ターミナルでCtrl + C(WindowsでもMacでも同じ)を押すことで強制的に停止できます。

まとめ

本章では、while文について学習しました。 理解できた内容は以下の通りです。

  • while文は条件が真である限り処理を繰り返す
  • for文は回数が決まっている場合、while文は条件による制御に適している
  • while True:break文を組み合わせることで柔軟な制御ができる
  • ユーザー入力による対話的なプログラムが作成できる
  • 無限ループに注意し、適切な終了条件を設定することが重要

while文を使うことで、より動的で対話的なプログラムを作成できるようになりました。数当てゲームのような、ユーザーとのやり取りが必要なプログラムを作る際には欠かせない機能です。

次回は、ループの制御をより詳しく学び、break文やcontinue文、そしてネストしたループについて学んでいきましょう。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Starterプランでより詳しく学習

この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
for文でリストの要素を処理しよう