♾️ ステップ7: while文と制御構文
条件が続く限り繰り返す!while文とループ制御をマスター
ステップ6では、for文で繰り返し処理を学びました。今回は、「条件が満たされている間ずっと繰り返す」while文と、ループを制御するbreak、continue文を学びます。
📖 このステップで学ぶこと
・while文の基本構文
・break文で途中終了
・continue文でスキップ
・無限ループに注意
・実践例:データの検索
・while Trueとbreakの組み合わせ
🔄 1. while文とは何か?
while文(ホワイル文)は、条件が正しい(True)間、ずっと繰り返す構文です。
🔰 for文とwhile文の違い
📌 使い分けのポイント
| 種類 | 使う場面 | 例 |
| for文 | 繰り返す回数が決まっているとき | リストの全要素を処理、1〜100を表示 |
| while文 | 条件が満たされている間ずっと繰り返す | 合計が100を超えるまで、ユーザーが「終了」と入力するまで |
🔰 while文の書き方
📌 while文の構文
while 条件:
条件が正しい間、繰り返す処理
※ 画面が小さい場合は、コードブロックを横にスクロールできます
3つのルール:
1. whileの後に条件を書く
2. 条件の後に:(コロン)を付ける
3. 実行する処理はインデント(字下げ)する
📘 最初のwhile文を書いてみよう
コード:1から5まで表示
# 1から5まで表示
count = 1
while count <= 5:
print(count)
count = count + 1 # countを1増やす
print("終了!")
実行結果
1 2 3 4 5 終了!
💡 コードの解説
count = 1
・変数countを1で初期化します
・この値が条件のチェックに使われます
while count <= 5:
・「countが5以下の間」繰り返します
・条件がTrueの間、ずっと実行されます
print(count)
・現在のcountの値を表示します
count = count + 1
・countを1増やします
・これを忘れると無限ループになります!
動作の流れ:
1. count=1、1<=5はTrue → 1を表示、countが2になる
2. count=2、2<=5はTrue → 2を表示、countが3になる
3. count=3、3<=5はTrue → 3を表示、countが4になる
4. count=4、4<=5はTrue → 4を表示、countが5になる
5. count=5、5<=5はTrue → 5を表示、countが6になる
6. count=6、6<=5はFalse → ループ終了
🔑 重要なポイント
while文では、ループ内で条件を変化させることが重要です。
上の例ではcount = count + 1で値を増やしています。
これを忘れると、条件がずっとTrueのままで無限ループになります!
⚠️ 2. 無限ループに注意
条件が永遠にTrueのままだと、プログラムが止まらなくなります。これを無限ループと呼びます。
❌ 無限ループの例
⚠️ これは無限ループです(実行しないでください!)
# これは無限ループ!
count = 1
while count <= 5:
print(count)
# countを増やすのを忘れた!
何が問題か:
・countがずっと1のままです
・条件count <= 5が永遠にTrueです
・ループが終わりません
・「1」が永遠に表示され続けます
🛑 無限ループを止める方法
📌 停止方法
もし無限ループになってしまったら:
Google Colabの場合:
・セルの左側にある停止ボタン(■)をクリック
・または「ランタイム」メニュー →「ランタイムを中断」
それでも止まらない場合:
・ブラウザをリロード(F5キー)
✅ while文を使うときのチェックリスト
💡 無限ループを防ぐために
□ 条件がいつかFalseになるか確認
□ ループ内で条件に関わる変数を変更しているか確認
□ 最初のテストは少ない回数で試す(例: while count <= 3)
□ デバッグ用のprint()を入れて動作確認
🛑 3. break文で途中終了
break文を使うと、ループを途中で終了できます。
📘 break文の基本
コード:特定の条件でループを抜ける
# 特定の条件でループを抜ける
count = 1
while count <= 10:
if count == 5:
print("5に到達したので終了")
break # ここでループを抜ける
print(count)
count = count + 1
print("ループ終了")
実行結果
1 2 3 4 5に到達したので終了 ループ終了
💡 コードの解説
while count <= 10:
・通常なら10まで繰り返します
if count == 5:
・countが5になったかチェックします
break
・この命令でループを即座に終了します
・while文の外(「ループ終了」の行)に移ります
・条件がcount <= 10でも、強制的に抜けます
breakがあるので、5の後は表示されません。
📘 実践例:目標値に到達したら終了
コード:合計が100を超えたら終了
# 合計が100を超えたら終了
total = 0
count = 1
while True: # 無限ループ(breakで抜ける)
total = total + count
if total > 100:
print(f"{count}を足したら100を超えました")
break
count = count + 1
print(f"最終的な合計:{total}")
実行結果
14を足したら100を超えました 最終的な合計:105
💡 while True:の使い方
while True:
・条件が常にTrueなので、通常は無限ループです
・しかしbreak文と組み合わせることで、複雑な終了条件を実現できます
動作の流れ:
・1を足す → 合計1、100以下なので続行
・2を足す → 合計3、100以下なので続行
・...
・13を足す → 合計91、100以下なので続行
・14を足す → 合計105、100を超えたのでbreak
📌 while True:の使いどころ
while True:は、以下の場合に便利です:
・終了条件が複雑な場合
・ループの途中で条件をチェックしたい場合
・ユーザーの入力を待つ場合
必ずbreak文で抜けられるようにしましょう。
⏭️ 4. continue文でスキップ
continue文を使うと、その回の残りの処理をスキップして、次のループに進むことができます。
📘 continue文の基本
コード:奇数だけ表示(偶数はスキップ)
# 奇数だけ表示(偶数はスキップ)
count = 0
while count < 10:
count = count + 1
if count % 2 == 0:
continue # 偶数ならスキップ
print(count)
実行結果
1 3 5 7 9
💡 コードの解説
count = count + 1
・最初にcountを増やします(重要!)
・continueの前に書かないと、無限ループになります
if count % 2 == 0:
・countが偶数かチェックします
continue
・この行以降をスキップして、while文の先頭に戻ります
・偶数の場合、print()は実行されません
・奇数の場合、continueが実行されないので、print()が実行されます
🔀 breakとcontinueの違い
📌 break vs continue
| 命令 | 動作 | 使いどころ |
| break | ループ全体を終了する | 目的を達成したら終了、エラーが出たら中断 |
| continue | その回だけスキップして次へ | 特定の条件の時だけ処理を飛ばす |
📝 breakとcontinueの比較例
コード:breakとcontinueの違い
# continueの場合
print("=== continueの場合 ===")
for i in range(1, 6):
if i == 3:
continue
print(i)
# breakの場合
print("\n=== breakの場合 ===")
for i in range(1, 6):
if i == 3:
break
print(i)
実行結果
=== continueの場合 === 1 2 4 5 === breakの場合 === 1 2
💡 違いの説明
continue:
・iが3の時だけスキップされます
・4と5は表示されます
・ループは最後まで続きます
break:
・iが3になった時点でループ全体が終了します
・4と5は表示されません
・ループから抜けます
🔍 5. 実践例:データの検索
📘 例1:リストから特定の値を探す
コード:名前のリストから「佐藤」を探す
# 名前のリストから「佐藤」を探す
names = ["田中", "鈴木", "佐藤", "高橋", "伊藤"]
# while文で検索
index = 0
found = False
while index < len(names):
if names[index] == "佐藤":
print(f"見つかりました!{index}番目にいます")
found = True
break
index = index + 1
if not found:
print("見つかりませんでした")
実行結果
見つかりました!2番目にいます
💡 コードの解説
index = 0
・リストの位置を示す変数を0で初期化
found = False
・見つかったかどうかのフラグ(目印)
while index < len(names):
・indexがリストの長さ未満の間繰り返す
・len(names)は5なので、index < 5
if names[index] == "佐藤":
・現在の位置の名前が「佐藤」かチェック
found = True と break
・見つかったフラグをTrueにして、ループを終了
if not found:
・ループ後、foundがFalseなら「見つかりませんでした」
📘 例2:貯金シミュレーション
コード:目標達成まで繰り返す
# 貯金シミュレーション
target = 100000 # 目標金額
savings = 0 # 現在の貯金
monthly = 15000 # 毎月の貯金額
months = 0 # 経過月数
print(f"目標:{target:,}円")
print(f"毎月の貯金:{monthly:,}円\n")
while savings < target:
months = months + 1
savings = savings + monthly
print(f"{months}ヶ月目:{savings:,}円")
print(f"\n目標達成!{months}ヶ月かかりました")
実行結果
目標:100,000円 毎月の貯金:15,000円 1ヶ月目:15,000円 2ヶ月目:30,000円 3ヶ月目:45,000円 4ヶ月目:60,000円 5ヶ月目:75,000円 6ヶ月目:90,000円 7ヶ月目:105,000円 目標達成!7ヶ月かかりました
💡 シミュレーションの流れ
while savings < target:
・貯金が目標額未満の間、繰り返します
months = months + 1
・月数をカウントアップします
savings = savings + monthly
・毎月の貯金額を加算します
{savings:,}円
・カンマ区切りで金額を表示します
7ヶ月目に105,000円になって、条件がFalseになりループ終了。
📘 例3:リストから0を全て削除
コード:リストに0がある間繰り返す
# リストから0を全て削除
numbers = [1, 0, 2, 0, 3, 0, 4]
print("元のリスト:", numbers)
# 0が含まれている間繰り返す
while 0 in numbers:
numbers.remove(0)
print("0を削除後:", numbers)
実行結果
元のリスト: [1, 0, 2, 0, 3, 0, 4] 0を削除後: [1, 2, 3, 4]
💡 コードの解説
0 in numbers
・numbersリストに0が含まれているかチェック
・含まれていればTrue、なければFalse
while 0 in numbers:
・0が含まれている間繰り返します
numbers.remove(0)
・最初に見つかった0を削除します
・削除すると、次のループで再度チェックされます
全ての0が削除されると、条件がFalseになってループ終了。
🎮 6. ゲームループの基本
📘 数当てゲーム
コード:数当てゲーム
import random
# 1から10のランダムな数を生成
answer = random.randint(1, 10)
attempts = 0
print("=== 数当てゲーム ===")
print("1から10の数を当ててください")
while True:
guess = int(input("予想:"))
attempts = attempts + 1
if guess == answer:
print(f"正解!{attempts}回で当たりました")
break
elif guess < answer:
print("もっと大きい数です")
else:
print("もっと小さい数です")
💡 コードの解説
import random
・ランダムな数を生成するためのモジュールを読み込みます
random.randint(1, 10)
・1から10までのランダムな整数を生成します
・この数が正解になります
input("予想:")
・ユーザーからキーボード入力を受け取ります
・Google Colabでは入力欄が表示されます
int(input(...))
・input()は文字列を返すので、int()で整数に変換します
while True:
・正解するまでずっと繰り返します
・正解したらbreakで抜けます
📌 randomモジュール
random.randint(a, b)
・aからbまでのランダムな整数を生成します
・aとbの両方を含みます(例: randint(1, 10)は1〜10)
ゲームやシミュレーションでよく使います。
📝 練習問題
ここまで学んだことを、実際に手を動かして確認しましょう。
問題1:カウントダウン(初級)
📋 問題
while文を使って、10から1までカウントダウンして表示してください。
最後に「発射!」と表示してください。
解答例を見る
コード
count = 10
while count > 0:
print(count)
count = count - 1
print("発射!")
実行結果
10 9 8 7 6 5 4 3 2 1 発射!
問題2:合計が50を超えるまで(初級)
📋 問題
1から順番に数を足していき、合計が50を超えたら終了するプログラムを作成してください。
各ステップで「〇を足して合計:〇〇」と表示してください。
解答例を見る
コード
total = 0
num = 1
while total <= 50:
total = total + num
print(f"{num}を足して合計:{total}")
num = num + 1
print(f"\n最終的な合計:{total}")
実行結果
1を足して合計:1 2を足して合計:3 3を足して合計:6 4を足して合計:10 5を足して合計:15 6を足して合計:21 7を足して合計:28 8を足して合計:36 9を足して合計:45 10を足して合計:55 最終的な合計:55
問題3:3の倍数だけ表示(中級)
📋 問題
1から30までの数の中で、3の倍数だけを表示してください。
continue文を使って、3の倍数でない数はスキップしてください。
解答例を見る
コード
num = 0
while num < 30:
num = num + 1
if num % 3 != 0:
continue # 3の倍数でなければスキップ
print(num)
実行結果
3 6 9 12 15 18 21 24 27 30
問題4:パスワード認証(中級)
📋 問題
正しいパスワードは"python123"です。
最大3回まで入力を試行できます。
正しいパスワードが入力されたら「認証成功」と表示して終了してください。
3回失敗したら「ロックされました」と表示してください。
解答例を見る
コード
# 正しいパスワード
correct_password = "python123"
# 最大3回まで試行可能
max_attempts = 3
attempts = 0
while attempts < max_attempts:
password = input("パスワードを入力してください:")
if password == correct_password:
print("認証成功!")
break
else:
attempts = attempts + 1
remaining = max_attempts - attempts
if remaining > 0:
print(f"パスワードが違います。残り{remaining}回")
else:
print("試行回数を超えました。ロックされました。")
問題5:フィボナッチ数列(上級)
📋 問題
フィボナッチ数列を、1000以下の範囲で表示してください。
フィボナッチ数列:1, 1, 2, 3, 5, 8, 13, ...(前の2つの数を足した数)
解答例を見る
コード
# 最初の2つの数
a = 1
b = 1
print(a)
print(b)
# 1000以下の間繰り返す
while True:
next_num = a + b
if next_num > 1000:
break
print(next_num)
a = b
b = next_num
実行結果
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
💡 ポイント
2つの変数を使って、前の2つの値を記憶しながら次の値を計算しています。
a = bとb = next_numで、値を更新します。
例: a=1, b=1 → next=2 → a=1, b=2 → next=3 → a=2, b=3 → ...
🎯 このステップのまとめ
✅ 学んだこと
✓ while文は条件がTrueの間繰り返す
✓ 無限ループに注意(条件がいつかFalseになるか確認)
✓ breakでループを途中終了
✓ continueでその回をスキップ
✓ while True:とbreakの組み合わせ
✓ データ検索やゲームループで活用
✓ for文とwhile文の使い分け
💡 次のステップに進む前に確認
以下のことができるようになったか確認しましょう:
□ while文の基本構文を理解した
□ 無限ループを避ける方法がわかった
□ breakとcontinueを使える
□ for文とwhile文の使い分けができる
□ while文でデータ検索ができる
これらができたら、次のステップに進みましょう!
❓ よくある質問
Q1: for文とwhile文、どちらを使うべきですか?
A: 繰り返す回数が決まっているならfor文、条件によって回数が変わるならwhile文が適しています。
迷ったらfor文から試してみましょう。
Q2: while True:は危険ではないですか?
A: while True:自体は無限ループですが、break文で必ず抜けられるようにすれば安全です。
ユーザー入力を待つ場合などでよく使われます。
Q3: breakとreturnの違いは?
A: breakはループを抜けるだけですが、return(後で学びます)は関数全体を終了します。
今はbreakだけ覚えておけば大丈夫です。
Q4: continueを使わずに書けますか?
A: はい、if文で条件を逆にすれば書けます。
continueは「読みやすさ」のための構文です。使わなくても同じことができますが、使った方がコードがシンプルになることがあります。
Q5: 無限ループになったらどうすればいいですか?
A: Google Colabなら、セルの停止ボタン(■)をクリックするか、「ランタイム」→「ランタイムを中断」で止められます。
止まらない場合はブラウザをリロードしましょう。
Q6: while文の中でfor文を使えますか?
A: はい、できます。
while文の中にfor文を書いたり、その逆も可能です。
ただし、ネストは深くしすぎないように注意しましょう。
Q7: input()で数値を入力するには?
A: input()は文字列を返すので、int(input())で整数に、float(input())で小数に変換します。
例: age = int(input("年齢:"))
Q8: ループが遅いです。速くする方法は?
A: データ分析では、後で学ぶNumPyやPandasを使うと、ループよりはるかに高速に処理できます。
今は基礎として、ループの仕組みを理解することが大切です。
学習メモ
Pythonデータ分析入門 - Step 7