コース一覧
    Pythonループ・関数
    入れ子ループ

    Pythonループ・関数

    ループと関数の基本を学び、繰り返し処理を分割して読みやすく書けるようにします。

    1
    ループ
    01. forで合計15分
    02. whileで繰り返す15分
    03. rangeとstep15分
    04. breakとcontinue15分
    05. enumerateで番号付け15分
    06. zipで組み合わせ15分
    07. 入れ子ループ15分
    08. つくる:何件でも記録15分
    09. 第5章クイズ10分
    2
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. デフォルト引数15分
    04. キーワード引数15分
    05. 複数の戻り値15分
    06. divmod15分
    07. 変数のスコープ15分
    08. lambda関数15分
    09. つくる:関数に分割15分
    10. 第6章クイズ10分

    入れ子ループ

    ネストしたループ

    縦と横の 2 方向に動きたい

    ここまでのループは、1 本の列を上から下へなぞるものでした。ところが表を作りたいとなると、縦と横の 2 方向に動く必要があります。

    そこで使うのが 入れ子ループ です。ループの中に、もう 1 つループを書きます。外側の for が 1 周する あいだに、内側の for が最後まで回りきります。

    Python

    for i in range(1, 4):
        for j in range(1, 4):
            print(i, j)

    9 行が表示されます。並びは 1 1、1 2、1 3、2 1 と続き、最後が 3 3 です。i が 1 つ進むあいだに j が 3 回まわっていることが読み取れます。

    外側と内側で同じ変数名を使ってはいけません。内側でも i を使うと外側の i が上書きされ、進み方が壊れます。外側は i、内側は j のように分けます。

    行の入れ物を、どこで空に戻すか

    表を 1 本の文字列にするときは、2 段構えで作ります。まず内側のループで 1 行分 を組み立て、それを外側のループで 表全体 に足していきます。

    このとき肝心なのが、行の入れ物を空に戻す位置です。外側のループの中、内側のループの前 に置きます。ここが外側より前にあると、1 行目の中身が残ったまま 2 行目が足され、全部の行がつながって 1 行になります。

    区切りを手前に足すやり方は、enumerate と zip のときと同じです。違うのは、行の中では半角スペース、行と行のあいだでは改行、と使う文字が 2 種類あることだけです。

    解説

    入れ子ループが思ったとおりに動かないときは、内側だけを取り出して 1 行分が正しく作れるかを先に確かめます。切り分けてから組み立て直すほうが、まとめて直すより速いです。

    回数は掛け算で増える

    外側が 3 周、内側が毎周 3 回なら、いちばん内側の処理は 3 * 3 で 9 回動きます。外側が 100 で内側が 100 なら 1 万回です。入れ子ループでは、回数が足し算ではなく掛け算で増えます。

    break と continue は、いちばん内側のループ 1 つ にしか効きません。内側で break しても、外側は次の周に進みます。外側まで一気に抜けたいときは、抜けたことを表す変数を用意して外側でも判定するか、処理を関数に切り出して return で抜けます。

    やってみよう

    関数 multiplication_table(n) を実装してください。引数 n は表の大きさ (int) です。

    1 から n までの縦横の掛け算をした表を、1 本の文字列として return します。同じ行の中の数は半角スペース 1 つで区切り、行と行は改行 \n で区切ります。末尾に改行は付けません。

    multiplication_table(3) なら "1 2 3\n2 4 6\n3 6 9" です。n が 0 のときは空文字 "" を返します。multiplication_table(9) が本物の九九の表になることも確かめてみてください。

    要件

    1. 関数名は multiplication_table で、引数は n の1つだけにする
    2. for を入れ子にして、外側で行、内側で列を作る
    3. 同じ行の数は半角スペース1つで区切り、行と行は \n で区切る
    4. 末尾に改行を付けない。n が 0 のときは空文字を返す

    ヒント

    外側は for i in range(1, n + 1)、内側は for j in range(1, n + 1) です

    1行分の入れ物 line は外側のループの中、内側のループの前で空にします

    掛け算の結果は str(i * j) で文字列に変えてからつなぎます

    区切りを手前に足すやり方にすると、行末と表の末尾に余分な文字が残りません

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

    関連レッスン

    • つくる:何件でも記録

      第5章の総仕上げ。記録の集まりから番号付き一覧と合計を返す show_all を作る

    • 第5章クイズ

      for と while、range の刻み幅、break と continue の違い、enumerate と zip を5問で確認する

    • 関数を定義する

      def で処理に名前を付け、呼び出して使う。定義と呼び出しの違いを理解する

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 変数データに名前をつけて参照する仕組み
    • 処理計算や代入を表す長方形
    • 関数処理に名前を付けて再利用できる単位
    • 引数位置引数=順番で渡す。
    main.py
    エディタを読み込んでいます

    メモ

    入れ子ループ

    ⌘S で保存