メインコンテンツにスキップ
モジュール 2 · レッスン 2 / 4コース内の 6/36~8 min
モジュールのレッスン (2/4)

while ループ

while ループは、条件が true である限りブロックを繰り返します。使用する while 必要な反復回数が事前にわからない場合: ラウンド数はループ内で変更される内容によって異なります。

構文

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

インデントされたブロックは繰り返し実行されます。各反復の前に Python 条件を評価します。条件が false になるとすぐにループが終了し、 実行はブロックの後も続行されます。

よくあるパターン

手動カウンター — 他の言語の古典的な for に相当します。

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

無限ループ + 内部終了条件 — 条件が次の場合に便利です。 何かをした後に評価されます:

Python
acc = 0
while True:
    acc = acc + 1
    if acc * acc > 100:
        break
acc  # 11   (11*11 = 121 is the first square > 100)

break は、最も内側のループからすぐに終了します (これについては次で説明します) レッスン)。

典型的な間違い: 無限ループ

条件内の変数がループ内で 変化しない場合、 プログラムは決して終了しません。これは、while の最大のバグです。

Python
n = 0
while n < 10:
    print(n)   # n is never modified → infinite loop!

この演習では実行タイムアウトがあるため、無限ループは失敗します。 ブラウザをフリーズさせるのではなく、明確なメッセージを表示します。しかし、本番環境では、 無限ループは重大なバグです。

無限ループのリスクと終了条件

while ループは、その条件が True と評価される限り実行されます。条件に影響を与える変数の更新を忘れると、ループが無限に実行され、ランタイムがフリーズします。ループ本体が終了条件に向かって進むことを常に確認してください。

自分で試してみてください

運動#python.m2.l2.e1
試行回数: 0読み込み中…

2**n が 100 万を超えるような最小の整数 `n >= 1` を見つけます。それを「result」に代入して評価します (20 になるはずです)。

エディターを読み込み中…
ヒントを表示

2**20 = 1,048,576 が初めて 1,000,000 を超えます。

3 回の試行後に解決策が利用可能になります

復習演習

運動#python.m2.l2.e2
試行回数: 0読み込み中…

`n = 1000` から始めて、n を整数除算 (n // 2) で 0 になるまで半分にします。`steps` で何回反復されるかを数えます。 「ステップ」を評価します。

エディターを読み込み中…
ヒントを表示

1000→500→250→125→62→31→15→7→3→1→0の10段階。

3 回の試行後に解決策が利用可能になります

追加の課題

運動#python.m2.l2.e3
試行回数: 0読み込み中…

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 回の試行後に解決策が利用可能になります