Pythonでfor文による繰り返し処理を使う方法をソースコード付きで解説します。
for文(繰り返し)
for文とは?
プログラムの「流れ(処理の順番)」をコントロールする文を制御構文といいます。
通常、プログラムは上から下へ順番に実行されますが、for文という制御構文を使って「イテラブルからデータを取り出し終わるまで同じ処理を繰り返す」ことができます。
書式
for 変数 in イテラブル: 処理(ブロック)
部分 | 説明 |
---|---|
変数 |
取り出した要素を一時的に入れるための変数 |
イテラブル |
繰り返し可能なデータの集まり(リスト、文字列、辞書、rangeなど) |
処理(ブロック) | インデントされた処理。取り出した要素に対して毎回実行される。 |
in演算子 | リスト内に指定した値があるか否かを確かめる演算子です。 |
イテラブルから「要素」を順番に取り出します。取り出した「要素の値」は変数に格納され、ブロック(インデントされた「処理内容」の部分)を繰り返し実行します。
インデントとは、行の先頭にスペースを入れて「この処理はfor文の中ですよ」とPythonに教えるためのルールです。書式のように、インデント毎にスペースを4つ使用するのが一般的です。
■ブロックってなに?
インデントされた複数行の処理をまとめて「ブロック」と呼びます。for文のブロックは、繰り返し実行される部分です。
サンプルコード
以下のコードは、for文でリストの要素を順番に取り出す例です。
# 勇者ぴこりの袋(リスト=イテラブル)
item_bag = ["剣", "弓", "やくそう", "魔法の石"]
print("袋の中身を確認中…")
# for文でリストから 「要素」を順番に取り出して表示
for item in item_bag:
# ブロック内の処理
print(f"→ {item}")
→ 剣
→ 弓
→ やくそう
→ 魔法の石
item
には袋から取り出したアイテムが1つずつ入ります。
リストの使い方については、以下ページでさらに詳しく解説しています。

「for文とin演算子」の使い方については、以下ページでさらに詳しく解説しています。

for文 + range関数
range関数とは?
range()
関数は、指定した範囲の整数を順番に生成する関数です。
書き方 | 説明 | 例 |
---|---|---|
range(終了) |
0から「終了−1」まで | range(5) → 0,1,2,3,4 |
range(開始, 終了) |
「開始」から「終了−1」まで | range(2, 5) → 2,3,4 |
range(開始, 終了, ステップ) |
「開始」から「終了−1」まで、ステップずつ | range(1, 10, 2) → 1,3,5,7,9 |
書式
for文とrange()
関数組み合わせることで、「何回繰り返すか」「どの数字からどこまで繰り返すか」を自由に指定できます。
for 変数 in range(開始, 終了, ステップ): 処理
終了だけ指定した場合は、「0」から「指定した終了の値」だけ繰り返します。
サンプルコード①
以下のコードは、range関数で終了だけ指定した場合の使用例です。
for turn in range(5):
print(f"{turn}ターン目:ぴこりは攻撃した!")
1ターン目:ぴこりは攻撃した!
2ターン目:ぴこりは攻撃した!
3ターン目:ぴこりは攻撃した!
4ターン目:ぴこりは攻撃した!
サンプルコード②
以下のコードは、range関数で開始と終了だけ指定した場合の使用例です。
for turn in range(1, 5):
print(f"{turn}ターン目:ぴこりは攻撃した!")
2ターン目:ぴこりは攻撃した!
3ターン目:ぴこりは攻撃した!
4ターン目:ぴこりは攻撃した!
サンプルコード③
以下のコードは、range関数で開始、終了、ステップを指定した場合の使用例です。
for turn in range(1, 5, 2):
print(f"{turn}ターン目:ぴこりは攻撃した!")
3ターン目:ぴこりは攻撃した!
for文 + enumerate関数
for
文 + enumerate()
を使うことで、リストから「要素番号(インデックス)」と「値」を同時に取り出すことができます。
書式
for 変数名1, 変数名2 in enumerate(リスト名):
※変数1に「要素番号(インデックス)」、変数2に「値(アイテム名など)」が代入されます。
for
文はリストの要素数だけループします。
サンプルコード
以下のコードは、for文 + enumerate関数の使用例です。
#-*- coding:utf-8 -*- # 勇者ぴこりの持ち物リスト item_bag = ["剣", "弓", "やくそう", "魔法の石"] # インデックスとアイテムを取り出して表示 for i, item in enumerate(item_bag): print("アイテム番号:", i, ", 名前:", item)
アイテム番号: 1 , 名前: 弓
アイテム番号: 2 , 名前: やくそう
アイテム番号: 3 , 名前: 魔法の石
i
にはアイテムの番号(0から始まる)、item
にはアイテム名が入ります。
enumerate(item_bag, start=1)
とすれば、番号を1から始めることもできます。

for文 + break文(強制終了)
for
文による繰り返し(ループ)を強制的に終了したい場合には break
文を使います。
書式
for 変数 in イテラブル:
if 条件式:
break
処理
キーワード | 説明 |
---|---|
for |
繰り返し処理の開始 |
if 条件式 |
特定の条件をチェック |
break |
条件を満たしたらループを強制終了 |
処理 |
条件に合わない場合に実行される処理 |
サンプルコード
以下のコードは、for文 + break文(強制終了)の使用例です。
# エリア内に落ちているアイテムのリスト
area_items = ["剣", "弓", "呪われた盾", "やくそう"]
print("■勇者ぴこりはエリアのアイテムを探索中…")
# エリア内のアイテム探索
for item in area_items:
if item == "呪われた盾":
print("⚠️ 勇者ぴこりは呪われた盾を発見した!探索を中断します")
break
print(f"→勇者ぴこりは「{item}」を拾った!")
print("■勇者ぴこりはエリアのアイテム探索を終了した!")
→勇者ぴこりは「剣」を拾った!
→勇者ぴこりは「弓」を拾った!
⚠️ 勇者ぴこりは呪われた盾を発見した!探索を中断します
■勇者ぴこりはエリアのアイテム探索を終了した!
for文でリスト area_items から “呪われた盾” を取り出したときにbreak文が実行され、探索(繰り返し処理)が中断されます。

for文 + continue文(スキップ)
for
文ではストなどの要素を順番に処理する際、特定の条件を満たしたときだけ“その回の処理をスキップ”したいことがあります。そんなときに使うのが continue
文です。
書式
for 変数 in イテラブル:
if 条件式:
continue
処理
キーワード | 説明 |
---|---|
if 条件式 |
スキップしたい条件を指定 |
continue |
条件に合った場合、その回の処理をスキップして次へ |
処理 |
条件に合わない場合に実行される処理 |
サンプルコード
以下のコードは、for文 + continue文(スキップ)の使用例です。
# エリア内に落ちているアイテムのリスト
area_items = ["剣", "弓", "呪われた盾", "やくそう"]
print("■勇者ぴこりはエリアのアイテムを探索中…")
# エリア内のアイテム探索
for item in area_items:
if item == "呪われた盾":
print("⚠️ 勇者ぴこりは「呪われた盾」をスルーした!")
continue
print(f"→ 勇者ぴこりは「{item}」を拾った!")
print("■勇者ぴこりはエリアのアイテム探索を終了した!")
→ 勇者ぴこりは「剣」を拾った!
→ 勇者ぴこりは「弓」を拾った!
⚠️ 勇者ぴこりは「呪われた盾」をスルーした!
→ 勇者ぴこりは「やくそう」を拾った!
■勇者ぴこりはエリアのアイテム探索を終了した!
for文でリスト area_items から “呪われた盾” を取り出したときにcontinue文が実行され、その回だけアイテム収集をスルーします。
業務だと、ログファイル処理で「コメント行だけ飛ばす」といった処理にcontinue文が使われます。

for文 + pass文(何もしない)
for
文ではリストなどの要素を順番に処理しますが、開発中のコードなど、特定の条件に合ったときに「何もしない」だけで処理を続けたい場面があります。そんなときに使うのが pass
文です。
書式
for 変数 in イテラブル:
if 条件式:
pass
処理
キーワード | 説明 |
---|---|
if 条件式 |
特定の条件を指定 |
pass |
条件に合った場合でも何もせず処理を続ける |
処理 |
ループ内で毎回実行される処理(passの後も実行される) |
サンプルコード
以下のコードは、for文 + pass文(何もしない)の使用例です。
# エリア内に落ちているアイテムのリスト
area_items = ["剣", "弓", "呪われた盾", "やくそう"]
print("■勇者ぴこりはエリアのアイテムを探索中…")
# エリア内のアイテム探索
for item in area_items:
if item == "呪われた盾":
pass # 後で呪われた盾に対する勇者ぴこりの反応を書く
print(f"→ 勇者ぴこりは「{item}」を拾った!")
print("■勇者ぴこりはエリアのアイテム探索を終了した!")
→ 勇者ぴこりは「剣」を拾った!
→ 勇者ぴこりは「弓」を拾った!
→ 勇者ぴこりは「呪われた盾」を拾った!
→ 勇者ぴこりは「やくそう」を拾った!
■勇者ぴこりはエリアのアイテム探索を終了した!
pass
文は「何もしない」だけなので、その後の print()
関数は実行されます。つまり "呪われた盾"
に対しても → 拾った!
が表示されてしまいます。スキップしたい場合は continue
を使うべきですが、pass
は開発中のコードを実行する際に、「空の処理を仮置きして構文エラーを防ぐ」場合などに用いられます。

for文 + else文
Pythonでは、for
文の後に else
をつけることで、ループが“最後まで正常に終わったとき”に実行される処理を書くことができます。
書式
for 変数 in イテラブル:
処理
else:
終了後の処理
キーワード | 説明 |
---|---|
for |
繰り返し処理の開始 |
else |
ループが途中で break されずに最後まで終わったときに実行される |
break |
使われた場合、else はスキップされる |
サンプルコード①
以下のコードは、for文 + else文の使用例です。
area_items = ["剣", "弓", "やくそう"]
print("■勇者ぴこりはエリアのアイテムを探索中…")
for item in area_items:
print(f"→ 勇者ぴこりは「{item}」を拾った!")
else:
print("✅ 勇者ぴこりはすべてのアイテムを拾い終えた!")
→ 勇者ぴこりは「剣」を拾った!
→ 勇者ぴこりは「弓」を拾った!
→ 勇者ぴこりは「やくそう」を拾った!
✅ 勇者ぴこりはすべてのアイテムを拾い終えた!
サンプルコード②
以下のコードは、for文 + else文 + break文の使用例です。
area_items = ["剣", "呪われた盾", "弓", "やくそう"]
print("■勇者ぴこりはエリアのアイテムを探索中…")
for item in area_items:
if item == "呪われた盾":
print("⚠️ 呪われた盾を発見!探索を中断します")
break
print(f"→ 勇者ぴこりは「{item}」を拾った!")
else:
print("✅ 勇者ぴこりはすべてのアイテムを拾い終えた!")
→ 勇者ぴこりは「剣」を拾った!
⚠️ 呪われた盾を発見!探索を中断します
break
文が実行されると繰り返し処理が中断されるため、else
文が実行されず「探索完了メッセージ」は表示されません。
ネストされたfor文(多重forループ)
Pythonでは、for
文の中にさらに for
文を書くことで、複数の要素を組み合わせて処理することができます。
これを「ネストされたfor文」または「多重forループ」と呼びます。
書式
for 変数1 in イテラブル1:
for 変数2 in イテラブル2:
処理
キーワード | 説明 |
---|---|
for × 2 |
外側と内側のループで組み合わせを処理 |
変数1 |
外側の要素(例:キャラクター) |
変数2 |
内側の要素(例:アイテム) |
処理 |
すべての組み合わせに対して実行される処理 |
サンプルコード
以下のコードは、2重forループの使用例です。
characters = ["勇者ぴこり", "魔法使いルーナ"]
items = ["剣", "弓", "盾"]
print("■キャラクターと装備の組み合わせ一覧")
for char in characters:
for item in items:
print(f"{char} は {item} を入手した!")
勇者ぴこり は 剣 を装備した!
勇者ぴこり は 弓 を装備した!
勇者ぴこり は 盾 を装備した!
魔法使いルーナ は 剣 を装備した!
魔法使いルーナ は 弓 を装備した!
魔法使いルーナ は 盾 を装備した!
外側のループでキャラクターを1人ずつ取り出し、内側のループでアイテムを1つずつ取り出します。
このような、forループのネスト構造は、「マップ × 敵」「ターン × 行動」「キャラ × スキル」などにも応用可能です。
練習問題
本ページで学んだ内容を定着させるとともに、「Python 3 エンジニア認定基礎試験」や「基本情報技術者試験」の対策にも役立つ練習問題を用意しましたので、チャレンジしてみてください。
【問題1】for文の基本構文(難易度★☆☆☆☆)
次のうち、Pythonでfor文を正しく使ってリストの要素を表示する方法を選びなさい。
A.
for x in [1, 2, 3] print(x)
B.
for x in [1, 2, 3]: print(x)
C.
for x: in [1, 2, 3] print(x)
D.
for x in [1, 2, 3] { print(x) }
解説:Pythonのfor文は「for 変数 in イテラブル:」の形式で書きます。コロン
:
の後にインデントされた処理を書く必要があります。
【問題2】range関数の動作(難易度★☆☆☆☆)
range(3)
の戻り値として正しいものを選びなさい。
A. [1, 2, 3]
B. [0, 1, 2, 3]
C. [0, 1, 2]
D. [3, 2, 1]
解説:
range(3)
は 0 から始まり、3未満の整数を順番に生成します。つまり [0, 1, 2]
です。
【問題3】文字列のfor文処理(難易度★☆☆☆☆)
次のコードの出力として正しいものを選びなさい。
for c in "魔法":
print(c)
A. 魔法
B. ['魔', '法']
C. 魔\n法
D. 魔\n法
※ \n
は改行コード
解説:文字列はイテラブルなので、for文で1文字ずつ取り出して表示できます。
print()
は改行されるため、1文字ずつ縦に表示されます。
【問題4】辞書のfor文処理(難易度★★☆☆☆)
次のコードの出力として正しいものを選びなさい。
d = {"HP": 100, "MP": 50}
for key in d:
print(key)
A. HP\nMP
B. 100\n50
C. ('HP', 100)\n('MP', 50)
D. HP:100\nMP:50
※ \n
は改行コード
解説:辞書をfor文で回すと、デフォルトではキーだけが取り出されます。値を取り出すには
d[key]
や d.items()
を使います。
【問題5】enumerateの使い方(難易度★★☆☆☆)
次のコードの出力として正しいものを選びなさい。
fruits = ["りんご", "バナナ"]
for i, fruit in enumerate(fruits):
print(i, fruit)
A. 0 りんご\n1 バナナ
B. りんご 0\nバナナ 1
C. 1 りんご\n2 バナナ
D. 0:りんご\n1:バナナ
※ \n
は改行コード
解説:
enumerate()
はインデックスと要素を同時に取り出す関数です。最初のインデックスは0から始まります。
【問題6】for文 + break(難易度★★★☆☆)
次のコードの出力として正しいものを選びなさい。
items = ["剣", "呪われた盾", "弓"]
for item in items:
if item == "呪われた盾":
break
print(item)
A. 剣\n呪われた盾\n弓
B. 剣
C. 剣\n弓
D. 呪われた盾
※ \n
は改行コード
解説:
break
はループを強制終了します。条件に一致した時点でループが止まるため、”剣” のみ表示されます。
【問題7】for文 + continue(難易度★★★☆☆)
次のコードの出力として正しいものを選びなさい。
items = ["剣", "呪われた盾", "弓"]
for item in items:
if item == "呪われた盾":
continue
print(item)
A. 剣\n呪われた盾\n弓
B. 剣\n弓
C. 呪われた盾
D. 剣
※ \n
は改行コード
解説:
continue
はその回の処理をスキップします。”呪われた盾” は表示されず、”剣” と “弓” のみが表示されます。
【問題8】ネストされたfor文(難易度★★★★☆)
次のコードの出力として正しいものを選びなさい。
chars = ["ぴこり", "ルーナ"]
skills = ["攻撃", "防御"]
for c in chars:
for s in skills:
print(c, s)
A. ぴこり 攻撃\nぴこり 防御\nルーナ 攻撃\nルーナ 防御
B. ぴこり ルーナ\n攻撃 防御
C. 攻撃 ぴこり\n防御 ルーナ
D. ぴこり 攻撃\nルーナ 防御
※ \n
は改行コード
解説:外側のループでキャラクターを1人ずつ取り出し、内側のループでスキルを1つずつ処理します。組み合わせとして「キャラ × スキル」がすべて表示されます。
【問題9】for文 + else文(難易度★★★★☆)
次のコードの出力として正しいものを選びなさい。
items = ["剣", "弓", "やくそう"]
for item in items:
print(item)
else:
print("探索完了!")
A. 剣\n弓\nやくそう
B. 剣\n弓\nやくそう\n探索完了!
C. 探索完了!
D. 剣\n探索完了!
※ \n
は改行コード
解説:
for
文が最後まで正常に終了すると、else
ブロックが実行されます。`break`が使われていないため、すべてのアイテムが表示された後に「探索完了!」が出力されます。
【問題10】for文 + continue文(応用)(難易度★★★★★)
次のコードの出力として正しいものを選びなさい。
items = ["剣", "", "やくそう", None]
for item in items:
if not item:
continue
print(item)
A. 剣\nやくそう
B. 剣\n\nやくそう\nNone
C. 剣\nやくそう\nNone
D. 剣\nやくそう\n0
※ \n
は改行コード
解説:
not item
は空文字 ""
や None
に対してTrueになります。continue
によってそれらの要素はスキップされ、"剣"
と "やくそう"
のみが表示されます。
課題(実践力強化用)
Pythonプログラミングの実践力を強化したい人向けの課題を用意しました。特にエラーメッセージを読んでコードを修正するという作業は、プログラミングおいて重要ですので、是非チャレンジしてみてください。
課題① 条件付き表示(難易度★★☆☆☆)
以下の仕様を満たすPythonコードを作成してください。
- リスト
["剣", "弓", "やくそう", "魔法の石"]
を順番に処理する "やくそう"
のときだけ「ぴこりは回復した!」と表示し、それ以外は「ぴこりは〇〇を装備した!」と表示する
ぴこりは弓を装備した!
ぴこりは回復した!
ぴこりは魔法の石を装備した!
items = ["剣", "弓", "やくそう", "魔法の石"] for item in items: if item == "やくそう": print("ぴこりは回復した!") else: print(f"ぴこりは{item}を装備した!")
課題② インデックスを1から始める(難易度★★☆☆☆)
以下の仕様を満たすPythonコードを作成してください。
- リスト
["剣", "弓", "やくそう"]
の要素を、インデックス付きで表示する - インデックスは「1」から始める
- 表示形式は「〇番目のアイテム:△△」とする
2番目のアイテム:弓
3番目のアイテム:やくそう
items = ["剣", "弓", "やくそう"] for i, item in enumerate(items, start=1): print(f"{i}番目のアイテム:{item}")
課題③ 文字列の1文字ずつ処理(難易度★★★☆☆)
以下の仕様を満たすPythonコードを作成してください。
- 文字列
"ぴこり"
を1文字ずつ取り出して表示する - 表示形式は「ぴこりの〇文字目:△」とする(1文字目から始める)
ぴこりの2文字目:こ
ぴこりの3文字目:り
name = "ぴこり" for i, char in enumerate(name, start=1): print(f"{name}の{i}文字目:{char}")
課題④ ネストされたfor文(難易度★★★★☆)
以下の仕様を満たすPythonコードを作成してください。
- キャラクター名を格納したリスト
["勇者ぴこり", "魔法使いルーナ"]
と武器名を格納したリストを["剣", "弓"]
を組み合わせて表示する - 表示形式は「〇〇は△△を装備した!」とする
※〇〇にはキャラクター名、△△には武器名が入る
勇者ぴこりは弓を装備した!
魔法使いルーナは剣を装備した!
魔法使いルーナは弓を装備した!
characters = ["ぴこり", "ルーナ"] items = ["剣", "弓"] for char in characters: for item in items: print(f"{char}は{item}を装備した!")
課題⑤ 条件付きcontinue(難易度★★★★☆)
以下の仕様を満たすPythonコードを作成してください。
- リスト
["剣", "", "やくそう", None]
を処理する - 空文字
""
やNone
のときはスキップし、それ以外は「ぴこりは〇〇を拾った!」と表示する
ぴこりはやくそうを拾った!
items = ["剣", "", "やくそう", None] for item in items: if not item: continue print(f"ぴこりは{item}を拾った!")
課題⑥ バトルログを表示する(難易度★★★★☆)
以下の仕様を満たすPythonコードを作成してください。
- 敵の名前リスト
["スライム", "ゴブリン", "ドラゴン"]
を順番に処理する - 各敵に対して「ぴこりは〇〇を攻撃した!」と表示する
"ドラゴン"
のときだけ「🔥 ぴこりはドラゴンに必殺技を使った!」と表示する
ぴこりはゴブリンを攻撃した!
🔥 ぴこりはドラゴンに必殺技を使った!
enemies = ["スライム", "ゴブリン", "ドラゴン"] for enemy in enemies: if enemy == "ドラゴン": print("🔥 ぴこりはドラゴンに必殺技を使った!") else: print(f"ぴこりは{enemy}を攻撃した!")
条件分岐を使って、特定の敵に対して特別な処理を加えています。
課題⑪ レベルアップ判定(難易度★★★★★)
以下の仕様を満たすPythonコードを作成してください。
- 経験値リスト
[120, 80, 200, 50]
を順番に処理する - 各値が100以上なら「ぴこりはレベルアップした!(経験値:〇)」と表示する
- それ以外は「ぴこりはまだ修行中…(経験値:〇)」と表示する
- 表示はインデックス付きで「〇回目の戦闘結果:△△」とする
2回目の戦闘結果:ぴこりはまだ修行中…(経験値:80)
3回目の戦闘結果:ぴこりはレベルアップした!(経験値:200)
4回目の戦闘結果:ぴこりはまだ修行中…(経験値:50)
exp_list = [120, 80, 200, 50] for i, exp in enumerate(exp_list, start=1): if exp >= 100: result = f"ぴこりはレベルアップした!(経験値:{exp})" else: result = f"ぴこりはまだ修行中…(経験値:{exp})" print(f"{i}回目の戦闘結果:{result}")
`enumerate()` で戦闘回数を管理し、条件分岐で結果を切り替えています。
課題⑧ 三角形を表示(難易度★★★★☆)
以下の仕様を満たすPythonコードを作成してください。
for
文を使って、アスタリスク(*
)で三角形を表示する- 行数は5行とする
- 各行に表示される
*
の数は、1→2→3→4→5と増えていく - 表示形式は左寄せでOK
**
***
****
*****
for i in range(1, 6): print("*" * i)
`range(1, 6)` によって 1〜5 の繰り返しが行われ、`*` をその回数分繰り返して表示しています。図形描画の基本です。
課題⑨ トライフォースを表示(難易度★★★★★)
以下の仕様を満たすPythonコードを作成してください。
for
文を使って、アスタリスク(*
)で「トライフォース(三角形3つ)」を表示する- 各三角形は高さ3とする
- 表示形式は以下の通り(中央揃え)
***
*****
* *
*** ***
height = 3 # 上の三角形 for i in range(height): stars = "*" * (2 * i + 1) spaces = " " * (height - i - 1) print(spaces + stars) # 下の左右の三角形 for i in range(height): left = "*" * (2 * i + 1) right = "*" * (2 * i + 1) gap = " " * (height * 2 - (2 * i + 1)) print(left + gap + right)
1つ目のループで中央の三角形を描画し、2つ目のループで左右の三角形を並べて「トライフォース」風に表示しています。
空白の調整がポイントです。
課題⑩ ダンジョンマップを表示(難易度★★★★★)
以下の仕様を満たすPythonコードを作成してください。
- 2次元リストでダンジョンマップを表現する
例:dungeon = [["床", "壁", "床"], ["敵", "床", "出口"]]
for
文を使ってマップを描画する- 各セルは以下の記号で表示する
"床"
→.
"壁"
→#
"敵"
→E
"出口"
→G
- 行ごとに改行して表示する
E.G
dungeon = [ ["床", "壁", "床"], ["敵", "床", "出口"] ] for row in dungeon: for cell in row: if cell == "床": print(".", end="") elif cell == "壁": print("#", end="") elif cell == "敵": print("E", end="") elif cell == "出口": print("G", end="") print() # 行の終わりで改行
2次元リストを使ってマップを構築し、ネストされたfor文で1セルずつ描画しています。
記号の割り当てによって、視覚的にダンジョンの構造がわかるようになっています。
関連ページ(もっと学びたい人へ)
Pythonの基礎から応用例まで、以下ページから学ぶことができます。

コメント