はじめに
whileに関しての備忘録。
🦁結論🦁
whileループは条件が真(true)の間、コードブロックを繰り返し実行することができる。
上限数、なくなるまで、あるまで、指定のものが行われるまでなど条件を自身で定義したものを繰り返し実行することができる。
無限ループに気をつけて使う必要がある。
押さえておくべき点
- ループ条件がいつかは偽(false)になることを必ず確認する(無限ループの原因になる)
- カウントなどを用意(while外での初期化)して変数を更新(count +=1など)して条件が変わるようにすることで指定回数分のループ処理を行える。
- 無限ループを意図的に使う場合は、while True:を使用(終了条件を明確に定義する必要がある)
- breakはループから抜けるために使う。
- continueは次の繰り返しに直ちに進む。
注意点
- 無限ループに注意が必要。
- 無限ループや非常に長いループは、プログラムのメモリ使用量やCPU使用率を高めてしまい処理を遅くしてしまう要因になる。
利用シーン
- 一度だけの実行では解決できないもの上限を決めて実行したいとき
- エラーになることを想定して指定の回数分を繰り返し行うようにする。
- 相手のリアクション待ちのとき
- 特定のものが見つかるまで続けるとき
- 特定の要素がなくなるまで実行するとき(次へボタンがなくなるまで次へボタンを押すなど)
利用シーンコード例
1. 一度だけの実行では解決できないもの、上限を決めて実行
# 10回メッセージを表示
count = 0
while count < 10:
print("これは繰り返しのテストです。")
count += 1
2. エラーになることを想定して指定の回数分を繰り返す
# 最大3回試行する例
attempts = 0
max_attempts = 3
while attempts < max_attempts:
try:
# エラーを起こす可能性のある操作
print("操作を試みる")
# 操作が成功したらループから抜ける
break
except Exception as e:
print(f"エラーが発生しました: {e}")
attempts += 1
3. 相手のリアクション待ち
user_input = ""
while user_input.lower() != "ok":
user_input = input("続けるには'ok'と入力してください: ")
print("続行します。")
4. 特定のものが見つかるまで
items = ["apple", "banana", "cherry", "date"]
found = False
i = 0
while i < len(items) and not found:
if items[i] == "cherry":
found = True
print("チェリーが見つかりました!")
i += 1
5. 次へボタンがなくなるまで次へボタンを押す
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
# WebDriverのパスと、テスト対象のページURLを設定
driver_path = 'YOUR_WEBDRIVER_PATH_HERE'
target_url = 'YOUR_TARGET_URL_HERE'
# WebDriverを起動
driver = webdriver.Chrome(driver_path)
driver.get(target_url)
while True:
try:
# 「次へ」というテキストを持つボタンのXPathを指定して要素を探す
next_button = driver.find_element_by_xpath("//button[contains(text(), '次へ')]")
# ボタンが見つかればクリック
next_button.click()
# クリック後に少し待つ(ページ遷移等を待機)
time.sleep(1)
except NoSuchElementException:
# 「次へ」ボタンが見つからなければループを抜ける
print("「次へ」ボタンが見つからないため、処理を終了します。")
break
# WebDriverを閉じる
driver.quit()
まとめ✍️
whileは基本文法のところでやってから、ほぼ使わなかったが、ここに来てすごく利用するシーンに出会う。
使うことでできる幅がさらに広くなる。
文法も覚えやすくていい。
今後も、応用部分も調べて使えるようにしたい。