基礎から学ぶPython入門 90日コース | Python基礎 - Day 6:for文

Python 90日で身につけるPython
スポンサーリンク
スポンサーリンク

Day 6:for文 ― 「同じ処理を“何度も繰り返す”力を手に入れる」

Day 6では、「for文」を扱います。 for文は、「同じような処理を、複数の値に対して順番に繰り返す」ための仕組みです。 Pythonでは、forrange()、リストや文字列のループ、enumerate() などを組み合わせて使うことで、データを1つずつ丁寧に処理できるようになります。 ここを理解すると、「一覧を表示する」「ログを1行ずつ解析する」「複数ユーザーに同じチェックをする」といった処理が一気に書きやすくなります。

for文の基本 ― 「集まりの中身を1つずつ取り出して処理する」

Pythonの for 文は、「何かの“集まり”の中身を1つずつ取り出して、同じ処理を繰り返す」ための構文です。 基本形は次のようになります。

# for文の基本形

numbers = [1, 2, 3]  # 数字のリスト

# numbersの中身を1つずつ取り出して、numに入れて処理する
for num in numbers:
    print(num)  # 1, 2, 3 と順番に表示されます
Python

ここで重要なのは、次の2点です。

  • for 変数 in 集まり: という形で書くこと 「集まりの中から1つずつ取り出して、その値を変数に入れる」という意味になります。
  • インデントされたブロックが「繰り返される処理」であること for の中に書いた行は、集まりの要素の数だけ繰り返し実行されます。

for文は、「何かを数える」「何かをチェックする」「何かを表示する」といった処理を、複数の値に対して一気に行うための道具です。

range() ― 「連続した数字の“集まり”を作る」

range() は、「連続した数字の集まり」を作るための関数です。 for文と組み合わせて、「○回繰り返す」「○から△までの数字を順番に処理する」といったことができます。

基本形は次の通りです。

# range()の基本(0から始まる)

# 0, 1, 2 を順番に取り出す
for i in range(3):
    print(i)
Python

このコードでは、range(3) が「0, 1, 2」という3つの数字の集まりを作り、 for文がそれを1つずつ i に入れて処理しています。

開始値と終了値を指定することもできます。

# range(開始, 終了) で、開始から終了-1までの数字を作る

# 1, 2, 3, 4 を順番に取り出す
for i in range(1, 5):
    print(i)
Python

ここでは、range(1, 5) が「1, 2, 3, 4」という集まりを作っています(終了値の5は含まれません)。

ステップ(増え方)を指定することもできます。

# range(開始, 終了, ステップ)

# 0, 2, 4, 6, 8 を順番に取り出す
for i in range(0, 10, 2):
    print(i)
Python

セキュリティ寄りのイメージとして、「最大試行回数までループする」例を見てみます。

# 最大3回までパスワード入力を許可するイメージ(実際の入力処理は省略)

max_retry = 3

for attempt in range(1, max_retry + 1):
    print(f"{attempt}回目の入力です")
    # 本来はここでパスワード入力とチェックを行います
Python

ここでは、「1回目〜3回目まで」という回数を range(1, max_retry + 1) で作り、 for文で順番に処理しています。

リストのループ ― 「複数の値を“まとめて処理する”」

リストは、「複数の値をまとめて持つ」ためのデータ型です。 for文と組み合わせると、「リストの中身を1つずつ取り出して処理する」ことができます。

# リストのループの基本

users = ["alice", "bob", "charlie"]  # ユーザー名のリスト

for user in users:
    print(f"ユーザー: {user}")
Python

ここでは、users の中身(”alice”, “bob”, “charlie”)が順番に user に入れられ、 そのたびに print() が実行されます。

リストのループは、「全ユーザーに対して同じチェックをする」といった場面で非常に便利です。

# ユーザーごとにログイン試行回数をチェックするイメージ

users = [
    {"name": "alice", "failed_login": 1},
    {"name": "bob", "failed_login": 4},
    {"name": "charlie", "failed_login": 0},
]

max_failed = 3  # 許容する最大失敗回数

for user in users:
    name = user["name"]
    failed = user["failed_login"]

    if failed >= max_failed:
        print(f"警告: {name}はログイン失敗が多すぎます({failed}回)")
    else:
        print(f"{name}は問題ありません(失敗回数: {failed}回)")
Python

このように、リストのループを使うと、「複数のユーザー」「複数のログ」「複数のファイル」などを、同じロジックで一気に処理できます。

文字列のループ ― 「1文字ずつ見ていくことで“中身をチェックする”」

文字列も、「for文でループできる集まり」です。 文字列をfor文で回すと、「1文字ずつ」取り出されます。

# 文字列のループの基本

text = "Python"

for ch in text:
    print(ch)  # P, y, t, h, o, n と1文字ずつ表示されます
Python

文字列のループは、「特定の文字が含まれているかチェックする」「危険な文字がないか確認する」といった場面で役立ちます。

# 危険な文字(例として '<' と '>')が含まれているかチェックする簡易例

user_input = "<script>alert('XSS');</script>"

dangerous_chars = ["<", ">"]
found_danger = False  # 危険な文字が見つかったかどうか

for ch in user_input:
    if ch in dangerous_chars:
        found_danger = True
        break  # 見つかったらループを抜ける

if found_danger:
    print("危険な文字が含まれています(エスケープが必要です)")
else:
    print("危険な文字は含まれていません")
Python

ここでは、文字列を1文字ずつチェックして、「危険な文字があるかどうか」を判定しています。 実際のWebアプリではもっと高度な処理が必要ですが、「文字列をループして中身を検査する」という発想は同じです。

enumerate() ― 「インデックス(何番目か)と値を同時に扱う」

enumerate() は、「for文でループするときに、インデックス(何番目か)と値を同時に取り出す」ための便利な関数です。

通常、リストをループするときは次のように書きます。

users = ["alice", "bob", "charlie"]

for user in users:
    print(user)
Python

ここでは「値(user)」しか分かりません。 「何番目のユーザーか」も知りたい場合、enumerate() を使います。

# enumerate()の基本

users = ["alice", "bob", "charlie"]

for index, user in enumerate(users):
    print(f"{index}番目のユーザー: {user}")
Python

このコードでは、

  • 0番目 → “alice”
  • 1番目 → “bob”
  • 2番目 → “charlie”

という形で、インデックスと値が同時に取り出されます。

インデックスを1から始めたい場合は、start 引数を使います。

# インデックスを1から始める例

users = ["alice", "bob", "charlie"]

for index, user in enumerate(users, start=1):
    print(f"{index}人目のユーザー: {user}")
Python

セキュリティ寄りのイメージとして、「ログの行番号を付けて表示する」例を見てみます。

# ログの各行に行番号を付けて表示する例

logs = [
    "INFO User logged in",
    "WARN Password attempt failed",
    "ERROR Database connection failed",
]

for line_number, log in enumerate(logs, start=1):
    print(f"{line_number}: {log}")
Python

ここでは、「何行目のログか」を行番号として表示しています。 行番号を付けておくと、後から「どの行に問題があったか」を特定しやすくなります。

Day 6のまとめと次へのつながり

Day 6では、

  • for 文:集まりの中身を1つずつ取り出して、同じ処理を繰り返す
  • range():連続した数字の集まりを作る
  • リストのループ:複数の値(ユーザー、ログ、ファイルなど)をまとめて処理する
  • 文字列のループ:1文字ずつチェックして、中身を検査する
  • enumerate():インデックスと値を同時に扱う

を学びました。

ここまで理解できると、「複数のデータを順番に処理する」という、プログラムの“作業力”が一気に上がります。 次のステップでは、for 文と条件分岐を組み合わせて、「特定の条件に当てはまるものだけを抽出する」「危険なものだけを警告する」といった、より実用的なロジックを作っていきます。

Day 6で特に重要なのは、「for文は“集まりを1つずつなめるための道具”であり、range()・リスト・文字列・enumerate()はその集まりを作る・扱うための相棒だ」という感覚です。 この感覚が身につくと、セキュリティ的にも「全ログをチェックする」「全ユーザーに対して制限をかける」といった処理を、自然と安全に書けるようになっていきます。


Day 6:for文で「九九表プログラム」を作る

Day 6の制作編では、「九九表」を題材にして、for文の基本から応用までを一気に体験していきます。 九九は「1〜9までの掛け算の表」なので、for文と range() の組み合わせにとても相性が良い題材です。 さらに、リストのループ・文字列のループ・enumerate() も、九九とは別の小さな例で確認しながら、for文の感覚をしっかり身につけていきます。

for文とrange()で「1〜9の繰り返し」を作る

まずは、for文と range() の基本から確認します。 range() は「連続した整数の並び」を作るための関数で、for文と組み合わせて使うことが多いです。

# 1〜9までの数字を順番に表示する例

for i in range(1, 10):  # 1から9まで(10は含まれない)
    print(i)
Python

ここでのポイントは次の通りです。

  • range(1, 10) は「1, 2, 3, …, 9」という整数の並びを表します(10は含まれません)。
  • for i in range(1, 10): は、「range(1, 10) の中身を1つずつ取り出して、変数 i に入れながら繰り返す」という意味です。
  • ループの中では、毎回 i の値が変わりながら処理が実行されます。

九九表を作るには、「1〜9の掛け算」を二重のfor文で表現することになります。 まずは「1の段」だけを作ってみましょう。

# 「1の段」だけを表示する例

for i in range(1, 10):  # 1〜9
    print(f"1 × {i} = {1 * i}")
Python

このコードでは、「1 × 1」「1 × 2」「…」「1 × 9」が順番に表示されます。 ここから、「段」と「掛ける数」の2つをfor文で回すことで、九九表全体を作っていきます。

二重のfor文で「九九表」を完成させる

九九表は、「1の段〜9の段」までをすべて表示するものです。 つまり、「段」を表すループと、「掛ける数」を表すループの2つが必要になります。

# 九九表を表示するプログラム(基本版)

for dan in range(1, 10):        # 段(1〜9)
    print(f"{dan}の段")          # 段の見出しを表示
    for i in range(1, 10):      # 掛ける数(1〜9)
        result = dan * i        # 掛け算の結果
        print(f"{dan} × {i} = {result}")
    print("-" * 20)             # 段ごとの区切り線
Python

このプログラムの流れは次のようになります。

  1. 外側のfor文で dan が1〜9まで変化しながら、「1の段」「2の段」…「9の段」を順番に処理します。
  2. 内側のfor文で i が1〜9まで変化しながら、「dan × i」の結果を表示します。
  3. 内側のループが終わると、その段の区切り線を表示して、次の段に進みます。

二重のfor文は、最初は少しややこしく感じるかもしれませんが、 「外側が段、内側が掛ける数」という役割分担を意識すると、自然に理解しやすくなります。

リストのループで「特定の段だけ」を扱う

次に、for文で「リストの中身」を順番に処理する例を見てみます。 九九とは少し離れますが、for文の感覚を広げるために重要なステップです。

例えば、「表示したい段だけをリストで指定する」という形にしてみます。

# 表示したい段をリストで指定して、その段だけ九九を表示する例

dans_to_show = [2, 5, 9]  # 2の段・5の段・9の段だけ表示したい

for dan in dans_to_show:  # リストの要素を1つずつ取り出してdanに入れる
    print(f"{dan}の段")
    for i in range(1, 10):
        result = dan * i
        print(f"{dan} × {i} = {result}")
    print("-" * 20)
Python

ここでは、

  • dans_to_show が「表示したい段のリスト」
  • for dan in dans_to_show: が「リストの中身を順番に取り出すループ」

になっています。

リストのループは、「複数の値をまとめて持っておき、順番に処理する」という場面で非常によく使われます。 九九以外でも、「ユーザー一覧」「ファイル名一覧」「ログの行一覧」など、さまざまな場面で登場します。

文字列のループで「九九のフォーマット」を確認する

for文は、リストだけでなく「文字列」に対しても使うことができます。 文字列は「文字の並び」なので、for文で1文字ずつ取り出すことができます。

九九とは直接関係しませんが、「文字列のループ」を知っておくと、 「フォーマットのチェック」「入力文字の検査」などに応用できるようになります。

# 文字列を1文字ずつループする例

text = "Python"

for ch in text:
    print(f"文字: {ch}")
Python

このコードでは、「P」「y」「t」「h」「o」「n」が順番に表示されます。 文字列のループは、セキュリティの観点では「入力文字に危険な文字が含まれていないかチェックする」といった場面で役立ちます。

九九表の文言をチェックする例として、「九九の1行を文字列として作り、その文字数を数える」こともできます。

line = "3 × 7 = 21"

count = 0
for ch in line:
    count += 1

print(f"'{line}' の文字数は {count} です。")
Python

もちろん、実際には len(line) を使えば一瞬で分かりますが、 for文で文字列を回す感覚をつかむための練習として有効です。

enumerate()で「インデックス付きのループ」を書く

最後に、enumerate() を使ったループを見てみます。 enumerate() は、「リストなどをループするときに、インデックス(何番目か)と値を同時に取り出せる」便利な関数です。

九九とは別に、「段の一覧をインデックス付きで表示する」例を考えてみます。

# 段の一覧をインデックス付きで表示する例

dans = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for index, dan in enumerate(dans):
    print(f"{index}番目の段は {dan}の段です。")
Python

ここでは、

  • enumerate(dans) が「(インデックス, 値) のペア」を順番に返します。
  • for index, dan in enumerate(dans): で、「インデックス」と「段の値」を同時に受け取っています。

九九表に絡めるなら、「何番目の段か」を表示することもできます。

for index, dan in enumerate(range(1, 10)):
    print(f"{index}番目のループで {dan}の段を表示します。")
    for i in range(1, 10):
        print(f"{dan} × {i} = {dan * i}")
    print("-" * 20)
Python

enumerate() は、「インデックスが欲しいけれど、手動でカウンタ変数を増やしていくのは面倒」というときに非常に便利です。 ログの行番号、ユーザーの順番、タスクの番号などを扱う場面でよく使われます。

九九表プログラムの完成版(コメント付き)

最後に、ここまでの内容を踏まえた「九九表プログラム」の完成版を示します。 コメントを多めに入れて、初心者の方にも読みやすい形にしています。

# 九九表を表示するプログラム

# 1〜9の段を順番に表示します
for dan in range(1, 10):  # 段(1〜9)
    print(f"{dan}の段")   # 段の見出し

    # 1〜9を掛ける数として使います
    for i in range(1, 10):  # 掛ける数(1〜9)
        result = dan * i    # 掛け算の結果
        print(f"{dan} × {i} = {result}")

    # 段ごとの区切り線
    print("-" * 20)

# リストのループとenumerate()の例(おまけ)

dans = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print("インデックス付きで段を表示します:")
for index, dan in enumerate(dans):
    print(f"{index}番目の要素は {dan}の段です。")
Python

Day 6(制作編)のまとめ

Day 6の制作編では、「九九表プログラム」を通して、

  • forrange() で「連続した数値の繰り返し」を作る
  • 二重のfor文で「段」と「掛ける数」を組み合わせて九九表を表示する
  • リストのループで「特定の段だけ」を扱う
  • 文字列のループで「1文字ずつ処理する」感覚をつかむ
  • enumerate() で「インデックス付きのループ」を書く

という一連の流れを体験していただきました。

ここまで来ると、「for文は単なる繰り返しではなく、“並びを1つずつ丁寧に処理するための道具”」として見えるようになっているはずです。 この感覚を土台に、今後はリスト・辞書・セットなど、さまざまなデータ構造とfor文を組み合わせて、 より複雑な処理や現実的なアプリケーションへと進んでいくことができます。

タイトルとURLをコピーしました