Step 7:while文と制御構文

♾️ ステップ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 = bb = 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

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE