0-9と0-10では for ループを使い、回数や範囲が決まっている繰り返しを書きました。今回学ぶ while ループは、回数ではなく条件で繰り返しを決めます。
たとえば「合計が100を超えるまで入力を続ける」「正しい合言葉が入るまで質問する」「ゲームが終了していない間だけ処理を続ける」といった場面では、for より while のほうが自然です。

まずはPycoBlocksを開こう
下のPycoBlocksで直接作業するか、別タブで開き、生成されるPythonコードを見ながら進めてください。
| 用語 | 意味 | 例 |
|---|---|---|
while |
条件が True の間、処理を繰り返す構文 | while x <= 5: |
| 無限ループ | 条件が変わらず True のままになること。条件に使う値の更新を忘れると発生する | x = x + 1 の忘れ |
| 番兵(sentinel) | ループを終了させる目印となる特別な値。0・空文字などが使われる | while password != "python": |
ステップ1:while は「条件が True の間」繰り返す
while 条件: は、条件が True の間だけ中の処理を繰り返します。条件が False になった時点で、ループの外へ進みます。

x = 1
while x <= 5:
print(x)
x = x + 1
この例では、最初に x = 1 としておきます。x <= 5 が成り立つ間は print(x) を実行し、そのあと x = x + 1 で x を1つ増やします。x が6になると条件が False になり、ループは止まります。
ステップ2:while では「値を変える処理」が特に大切
while で最も多い失敗は、条件に使っている値を変え忘れることです。値が変わらないと、条件がいつまでも True のままになり、ループが終わりません。

x = 1
while x <= 5:
print(x)
# x = x + 1 を忘れると、ずっと x は 1 のまま
PycoBlocksでは実行ステップ数に上限があり、終わらないループは途中で止まります。これはブラウザを守るための仕組みです。while を書くときは、「いつ条件が False になるのか」を必ず確認します。
ステップ3:入力が条件を満たすまで繰り返そう
while は、入力と組み合わせると便利です。次の例は、合言葉が python になるまで入力を続けるプログラムです。

password = ""
while password != "python":
password = input("合言葉は?")
print("OK!")
最初に password = "" としておくのは、while password != "python": の条件で password を使うためです。まだ入力していない変数を条件に使うことはできません。
ステップ4:for と while を使い分けよう
for は「何回繰り返すか」が先にわかっているときに向いています。一方、while は「いつ終わるかは実行してみないとわからない」ときに向いています。
# for が向いている例:1から10まで表示
for i in range(1, 11):
print(i)
一方、合計が一定の値を超えるまで入力を続けるような処理は、何回繰り返すかが事前にわかりません。こういった場面では while が自然です。

total = 0
while total < 10:
n = int(input("足す数は?"))
total = total + n
print(total)
0-10で学んだ range(start, stop, step) は、範囲が決まっている反復に強い書き方です。while は、入力・センサー値・ゲームの状態など、条件が毎回変化する処理に強い書き方です。
コーディングモードで書いてみよう
コードで書くと、while の設計ポイントは「初期化」「条件」「更新」の3つだとわかります。
# 初期化
total = 0
# 条件
while total < 100:
n = int(input("加算する点数: "))
# 更新
total += n
print("現在の合計:", total)
print("100以上になりました")
total += n は total = total + n の短い書き方です。while文では「初期化」「条件」「更新」の3つをセットで設計すると、終わらないループを防げます。
演習課題
演習では 0-7 で学んだ if 文を while ループの中で組み合わせます。条件に応じて処理を変えながら繰り返す書き方を練習します。
課題11-1:1から5まで表示しよう
while を使って、1, 2, 3, 4, 5 を1行ずつ表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

x = 1
while x <= 5:
print(x)
x = x + 1
解説: x = x + 1 があるため、x は 1→2→3→4→5→6 と変化します。6になった時点で x <= 5 が False になり、ループが終わります。
課題11-2:10から1までカウントダウンしよう
while を使って 10, 9, 8, ... 1 と表示し、最後に「発射!」と表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

x = 10
while x >= 1:
print(x)
x = x - 1
print("発射!")
解説: x = x - 1 で値を減らしている点がポイントです。print("発射!") はインデントを外し、ループ終了後に1回だけ実行します。
課題11-3:合言葉が合うまで入力を続けよう
入力された文字列が "python" になるまで質問を続け、正しく入力されたら OK! と表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

password = ""
while password != "python":
password = input("合言葉は?")
print("OK!")
解説: 最初の password = "" は初期化です。whileの条件で使う変数は、ループに入る前に必ず用意しておきます。
課題11-4:合計が100以上になるまで足し続けよう
整数を入力し、その値を合計に足していきます。合計が100以上になったらループを止め、最後の合計を表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

total = 0
while total < 100:
n = int(input("足す数は?"))
total = total + n
print("最終合計:", total)
解説: total < 100 が True の間だけ入力を続けます。入力された値によって何回繰り返すかが変わるため、forよりwhileが自然です。
課題11-5:0が入力されるまで平均を計算しよう
正の整数を何個か入力します。0が入力されたら入力を終了し、それまでに入力された数の合計・個数・平均を表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

total = 0
count = 0
n = int(input("数を入力(0で終了): "))
while n != 0:
total = total + n
count = count + 1
n = int(input("数を入力(0で終了): "))
if count > 0:
print("合計:", total)
print("個数:", count)
print("平均:", total / count)
else:
print("データがありません")
解説: 0を「終了の合図」として使う考え方を番兵(sentinel)と呼びます。0自身は合計に含めないため、whileの中で加算する前に n != 0 を確認しています。
課題11-6:数字当てゲームを作ろう
答えを7に固定し、ユーザーが正解するまで入力を続ける数字当てゲームを作ってください。入力が小さすぎるときは「もっと大きい」、大きすぎるときは「もっと小さい」と表示してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

answer = 7
guess = 0
while guess != answer:
guess = int(input("1〜10の数字を予想: "))
if guess < answer:
print("もっと大きい")
elif guess > answer:
print("もっと小さい")
print("正解!")
解説: 0-7で学んだ if / elif と while を組み合わせています。正解するまで何回入力するかは人によって変わるため、whileが向いています。
まとめ
while 条件:は、条件がTrueの間だけ処理を繰り返す- whileでは「初期化」「条件」「更新」の3点を必ず確認する
- 条件に使う値を変え忘れると、ループが終わらない
forは回数や範囲が決まっている反復、whileは終了条件で決まる反復に向いている- 入力を繰り返す処理では、終了の合図(例:0や合言葉)を決めると設計しやすい
次は リスト を学びます。複数の値をまとめて持てるようになると、forやwhileで扱えるデータが一気に増えます。→ Python × 入門 | #12 リストにデータをまとめよう