Pythonでwhile文の使い方と応用

投稿日: 2024年2月25日

Pythonのwhile(ウィル)文は、指定した条件が真(True)である限り、コードブロックを繰り返し実行するために使用されます。
while文は、ループの回数が事前に不明な場合や、条件が満たされるまで処理を続けたい場合に便利です。

1.基本的な使い方

以下は、while文の基本的な形式です。

while 条件式:
    # 実行するコードブロック

条件式がTrueである限り、コードブロックが繰り返し実行されます。条件式がFalseになると、ループは終了します。

2.簡単な例

count = 0
while count < 5:
    print("countは", count)
    count += 1  # countを1増やす

この例では、countが5未満である間、ループが続きます。ループの各反復でcountが1ずつ増加し、countが5になると条件がFalseと評価され、ループが終了します。

3.複雑なwhile文の例

複雑なwhile文を使用する例として、ユーザーからの入力を受け取り、特定の条件が満たされるまで続けるプログラムを考えてみましょう。

# ユーザーが'quit'を入力するまで入力を受け付けるプログラム
user_input = ""
while user_input.lower() != "quit":
    user_input = input("何か入力してください(終了するには'quit'と入力): ")
    if user_input.lower() != "quit":
        print("あなたの入力:", user_input)

この例では、ユーザーが’quit’と入力するまで、ユーザーの入力を受け付けて表示し続けます。input()関数はユーザーからの入力を受け取るために使われ、入力された文字列を変数user_inputに格納します。ユーザーが’quit’を入力すると、ループが終了します。

4.何に使うか

while文は、以下のような場面で有効です:

  • ユーザーが特定のアクションを取るまでプログラムを続ける場合(上記のユーザー入力例のように)。
  • ファイルの終わりに達するまでデータを読み込む場合。
  • ネットワーク接続が確立されるまで試行を続ける場合。

while文は非常に強力で柔軟な制御構造ですが、無限ループに陥らないように注意が必要です。ループを終了させるための条件がいずれかの時点でFalseになることを確認することが重要です。

ネットワーク接続が確立されるまで試行を続ける

さっきの記事の中にネットワーク接続が確立されるまで試行を続けると記載しましたのでその例を以下に示します。
このスクリプトでは、接続を試みるために外部ライブラリ(例えば、requestsを使って特定のURLに対する簡単なHTTP GETリクエストを送信)を使用します。
接続が成功するまで、または試行回数が上限に達するまでループします。

pip install requests

ターミナルでインストールするかAnacondaの場合は「requests」で検索してインストールしてください。
次にPythonのコードになります。

import requests
from time import sleep

# 接続を試みるURL
url = "http://example.com"
# 最大試行回数
max_attempts = 5
# 現在の試行回数
attempts = 0

# ネットワーク接続が確立するまでループ
while attempts < max_attempts:
    try:
        # URLに対してGETリクエストを送信
        response = requests.get(url)
        # ステータスコードが200なら接続成功
        if response.status_code == 200:
            print("ネットワーク接続が確立されました。")
            break
    except requests.ConnectionError:
        # 接続エラーが発生した場合
        print(f"{attempts + 1}回目の試行で接続に失敗しました。")
    
    # 試行回数を更新
    attempts += 1
    # サーバーに負担をかけないように少し待機
    sleep(5)  # 5秒待機

if attempts == max_attempts:
    print("接続を確立できませんでした。")

このコードは、指定したURLに対して最大5回接続を試みます。接続が成功すると、ループから抜け出します。
接続に失敗した場合は、エラーメッセージを表示した後、5秒間待機してから再試行します。
最大試行回数に達した場合は、接続が確立できなかったことをユーザーに知らせます。

記事