モジュールのレッスン (2/4)
while ループ
while ループは、条件が true である限りブロックを繰り返します。使用する
while 必要な反復回数が事前にわからない場合:
ラウンド数はループ内で変更される内容によって異なります。
構文
n = 1
while n < 1000:
n = n * 2
n # 1024インデントされたブロックは繰り返し実行されます。各反復の前に Python 条件を評価します。条件が false になるとすぐにループが終了し、 実行はブロックの後も続行されます。
よくあるパターン
手動カウンター — 他の言語の古典的な for に相当します。
i = 0
while i < 5:
print(i)
i = i + 1無限ループ + 内部終了条件 — 条件が次の場合に便利です。 何かをした後に評価されます:
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 is the first square > 100)break は、最も内側のループからすぐに終了します (これについては次で説明します)
レッスン)。
典型的な間違い: 無限ループ
条件内の変数がループ内で 変化しない場合、
プログラムは決して終了しません。これは、while の最大のバグです。
n = 0
while n < 10:
print(n) # n is never modified → infinite loop!この演習では実行タイムアウトがあるため、無限ループは失敗します。 ブラウザをフリーズさせるのではなく、明確なメッセージを表示します。しかし、本番環境では、 無限ループは重大なバグです。
無限ループのリスクと終了条件
while ループは、その条件が True と評価される限り実行されます。条件に影響を与える変数の更新を忘れると、ループが無限に実行され、ランタイムがフリーズします。ループ本体が終了条件に向かって進むことを常に確認してください。
自分で試してみてください
2**n が 100 万を超えるような最小の整数 `n >= 1` を見つけます。それを「result」に代入して評価します (20 になるはずです)。
ヒントを表示
2**20 = 1,048,576 が初めて 1,000,000 を超えます。
3 回の試行後に解決策が利用可能になります
復習演習
`n = 1000` から始めて、n を整数除算 (n // 2) で 0 になるまで半分にします。`steps` で何回反復されるかを数えます。 「ステップ」を評価します。
ヒントを表示
1000→500→250→125→62→31→15→7→3→1→0の10段階。
3 回の試行後に解決策が利用可能になります
追加の課題
Given the variable `n = 32`, write a `while` loop to count how many times you can divide `n` by 2 (using floor division `//`) before `n` becomes less than or equal to 1. Store the count in `divisions` and evaluate it.
ヒントを表示
The while condition is n > 1. Inside the loop, divide n by 2 and increment divisions by 1.
3 回の試行後に解決策が利用可能になります