- Day 6:for文 ― 「同じ処理を“何度も繰り返す”力を手に入れる」
- for文の基本 ― 「集まりの中身を1つずつ取り出して処理する」
- range() ― 「連続した数字の“集まり”を作る」
- リストのループ ― 「複数の値を“まとめて処理する”」
- 文字列のループ ― 「1文字ずつ見ていくことで“中身をチェックする”」
- enumerate() ― 「インデックス(何番目か)と値を同時に扱う」
- Day 6のまとめと次へのつながり
- Day 6:for文で「九九表プログラム」を作る
- for文とrange()で「1〜9の繰り返し」を作る
- 二重のfor文で「九九表」を完成させる
- リストのループで「特定の段だけ」を扱う
- 文字列のループで「九九のフォーマット」を確認する
- enumerate()で「インデックス付きのループ」を書く
- 九九表プログラムの完成版(コメント付き)
- Day 6(制作編)のまとめ
Day 6:for文 ― 「同じ処理を“何度も繰り返す”力を手に入れる」
Day 6では、「for文」を扱います。 for文は、「同じような処理を、複数の値に対して順番に繰り返す」ための仕組みです。 Pythonでは、for と range()、リストや文字列のループ、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このプログラムの流れは次のようになります。
- 外側のfor文で
danが1〜9まで変化しながら、「1の段」「2の段」…「9の段」を順番に処理します。 - 内側のfor文で
iが1〜9まで変化しながら、「dan × i」の結果を表示します。 - 内側のループが終わると、その段の区切り線を表示して、次の段に進みます。
二重の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)
Pythonenumerate() は、「インデックスが欲しいけれど、手動でカウンタ変数を増やしていくのは面倒」というときに非常に便利です。 ログの行番号、ユーザーの順番、タスクの番号などを扱う場面でよく使われます。
九九表プログラムの完成版(コメント付き)
最後に、ここまでの内容を踏まえた「九九表プログラム」の完成版を示します。 コメントを多めに入れて、初心者の方にも読みやすい形にしています。
# 九九表を表示するプログラム
# 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}の段です。")
PythonDay 6(制作編)のまとめ
Day 6の制作編では、「九九表プログラム」を通して、
forとrange()で「連続した数値の繰り返し」を作る- 二重のfor文で「段」と「掛ける数」を組み合わせて九九表を表示する
- リストのループで「特定の段だけ」を扱う
- 文字列のループで「1文字ずつ処理する」感覚をつかむ
enumerate()で「インデックス付きのループ」を書く
という一連の流れを体験していただきました。
ここまで来ると、「for文は単なる繰り返しではなく、“並びを1つずつ丁寧に処理するための道具”」として見えるようになっているはずです。 この感覚を土台に、今後はリスト・辞書・セットなど、さまざまなデータ構造とfor文を組み合わせて、 より複雑な処理や現実的なアプリケーションへと進んでいくことができます。
