お知らせ

『プログラミング能力検定(11月検定)』参加者募集中!

詳細はこちら

【10】「繰り返し」を繰り返す

「for ネスト」イメージ画像 マイクラ(Python)

for文Aの中にさらに for文Bを入れることで繰り返し文を繰り返すことができます。この入れ子状態を「ネスト」といいますが、for文Afor文Bの関係は「インデント(字下げ)」で書き分けることになります。

for文を2つ使って正方形の壁を作る

では練習として上の画像のような正方形の壁を for文 を使って作ってみましょう。大きさはタテ✕ヨコが 4✕4 の正方形です。4✕4 の正方形ですが、分解すれば下の画像のように「長さ3の壁」が4個と考えることができます。

繰り返しネスト1

まず「長さ3の壁」を作るプログラムを考えます。

繰り返しネスト2

今回はエージェントが1ブロック浮いた位置からスタートすることにします。そのうえで、まず「下にブロックを置く」「前に1ブロック移動」3回繰り返し「長さ3の壁」を作ります。これをコードにすると以下のようになります。

for i in range(3):
    agent.place(DOWN)
    agent.move(FORWARD, 1)

これで上の画像のような「長さ3の壁」ができました。2行目と3行目が1段階字下げされていることを確認してください。この「長さ3の壁」を4回繰り返せばいいのですが、そのまま繰り返すと一直線の長い壁になってしまいますので、「長さ3の壁」ができたらエージェントの向きを右に変えておきます。

for i in range(3):
    agent.place(DOWN)
    agent.move(FORWARD, 1)

agent.turn(RIGHT)

繰り返しネスト2
ひとつ上の画像と比べてエージェントの向きが変わっていることを確認してください

この agent.turn(RIGHT) はブロックを3個置いたあとに1回だけ実行すればいいので字下げせずに for文の範囲から外しておきます。

そしてこれらの動作をまとめて4回繰り返すために、新しい for文を先頭に付け足します。新しい for文の変数は「j」としておきましょう。

for j in range(4):
for i in range(3):
    agent.place(DOWN)
    agent.move(FORWARD, 1)

agent.turn(RIGHT)

この新しい for文で繰り返される動作というのは2行目から5行目までのすべてのコードになりますので、2行目から5行目のコードを新たに1段階字下げします。もともと字下げされていた3行目と4行目は結果的に2段階字下げされることになります。

for j in range(4):
    for i in range(3):
        agent.place(DOWN)
        agent.move(FORWARD, 1)
    agent.turn(RIGHT)

繰り返しネスト3

これで 4✕4 の正方形の壁が完成しました。(ブロックの種類を「レンガブロック( BRICKS )」にした例)