Pythonでのくり返し(for文)

前回は、「同じ処理を何回もくり返す」ための仕組みとして、「for(フォー)文」の基本を学習しました。

今回はその復習として、「リストの要素を一つずつ確認する」考え方をたしかめ、「for文」をさらにくわしく見ていきます。

また、「for文」の中にもう1つ「for文」を入れる「for文の『ネスト(入れ子構造)』」についても学んでいきます。

確認していくための準備として、Visual Studio Codeのエクスプローラーに新規フォルダ「basic1_7」を作成しましょう。


「for文の『入れ子構造(ネスト)』」は、「for文」の中に別の「for文」が含まれている構造のことです。
「ループ処理」とも呼ばれ、くり返しの中でさらにくり返しを行うときに使います。
Scratchプログラミングでも、くり返しブロックの中に、別のくり返しブロックを入れたことがある人も多いのではないでしょうか?


スライドの学習内容

  • 1. for文のおさらい(走査)
  • 2. for文のネスト

1. for文のおさらい(走査)

まずは前回の復習として、「for文」を使ってリストの中身を1つずつ取り出すプログラムを作ってみましょう。

Visual Studio Codeの「basic1_7」フォルダの中に、新規ファイル「basic1_7_1.py」を作成し、次のようなプログラムを作ってください。

作るプログラム

次の条件にしたがって、「for文」を使ったプログラムを作りましょう。


  • ・リスト「snacks」を用意する
    (内容: ['令和ミルクチョコレート', 'レタス太郎', 'パッチンプリン', 'こんがりコーン', 'ざくざくぱんだ'] )
  • ・「for文」を使って、リスト内の要素を1つずつ表示する
  • ・取り出したデータを入れる変数の名前は「snack」にする

どうしても作り方がわからなかったら、下の「プログラム例」をクリックしてみましょう。
お手本プログラムを見ることができます。「プログラム例」を見ずに作成できた人も、答え合わせとして確認してください。

実行結果

令和ミルクチョコレート
レタス太郎
パッチンプリン
こんがりコーン
ざくざくぱんだ
プログラム例(ここをクリック)
snacks = ['令和ミルクチョコレート', 'レタス太郎', 'パッチンプリン', 'こんがりコーン', 'ざくざくぱんだ']

for snack in snacks:
    print(snack)

「for文」を使って、リスト「snacks」の要素を1つずつ表示するプログラムを作ることができましたか。


「for文」を使うことで、リストや文字列などのイテラブルオブジェクトから要素を、最初から最後まで1つずつ取り出して処理できます。

このような処理の流れのことを、「走査(そうさ)」といいます。



「走査」は、英語で「『スキャン(Scan)』」といい、「スキャンするように、データを順番に取り出して処理していく」イメージの処理です。


2. for文のネスト

Pythonでは、「for文」の中にさらに別の「for文」を入れることができます。

このような構造を「ネスト(入れ子構造)」と呼びます。


「ネストされたfor文」は、くり返しの中でさらにくり返しをおこなうような場面で使われます。たとえば、映画館の座席表のように、行と列の2つの軸(じく)があるデータを表示したいときに便利です。


次のプログラムで、どのように「ネスト」が動いているかを確認してみましょう。

まずは、Visual Studio Codeのエクスプローラーにある「basic1_7」フォルダで新規ファイル「basic1_7_2.py」を作成し、次のように入力してください。

rows = ['A', 'B', 'C']

for row in rows:
    for num in range(1, 4):
        print(row, num, end='\t')   
    print('')  

入力ができたら実行をしましょう。映画館の座席表のようなものが結果として表示されます。


実行結果


このプログラムの「for文のネスト」の流れは次の図のようになっています。



このプログラムでは、外側の「for文」で行(A, B, C)を順番に取り出し、そのたびに内側の「for文」で列(1〜3)を順番に取り出して表示しています。

5行目の「end='\t'」はエスケープシーケンスです。print関数で表示する文字列の最後の文字を「タブ」に指定しています。また、内側のくり返し(for文)をぬけたら、改行を行うために、6行目で「print('') 」を記述しています。


コ ラ ム

多重ループについて

このように、ループの中に別のループが入っている構造を「2重ループ」と呼びます。さらにネストを深くして3重、4重と続けることもできますが、プログラムが複雑になりやすくなるため、必要がある場合をのぞき、3重以上のループはなるべくさける工夫をしましょう。

「外側の『for文』と内側の『for文』で動きにどのような関係があるか」ネストのプログラムの流れが理解できましたか?


次に、「for文のネスト」を使って、「算数の九九の一覧」を表示するプログラムを作ってみましょう。

Visual Studio Codeの「basic1_7」フォルダの中に、新規ファイル「basic1_7_3.py」を作成し、次のように入力してください。

for i in range(1, 10):
    for j in range(1, 10):
        print(i, '×', j, '=', i*j, end='\t')
    print('')

入力ができたら実行をしましょう。次のように「九九の一覧表」が表示されます。


実行結果


「basic1_7_2.py」の時と同じように、外側の「for文」で1〜9の数字(変数「i」)を1つずつ取り出し、それぞれに内側の「for文」で同じく1〜9(変数「j」)を1つずつ取り出してかけ算をおこなっています。「i」はかけられる数、「j」はかける数です。

コ ラ ム

「変換指定子(%d)」と「書式化演算子(%)」

「basic1_7_3.py」のプログラムは、次のように書きかえることもできます。

3行目の print関数を以下のように修正してみましょう。

print('%d × %d = %d' % (i, j, i*j), end='\t')

修正できたら実行しましょう。

このように書きかえても表示される内容は変わらず、「九九の一覧表」が同じように出力されます。


実行結果


この記述方法で使われている「%」は「書式化演算子(しょしきかえんざんし)」、「%d」は「変換指定子(へんかんしていし)」と呼ばれます。



「変換指定子」は「%」に続けて、「d」などのアルファベットを指定します。

以前学習した「formatメソッド」と同じく、この「%」を使った方法でも、文字列に値をうめこむことができます。



主な「変換指定子」

変換型 意味
d 10進数
f 浮動小数点数(ふどうしょうすうてんすう)
s 文字列

「書式化演算子(%演算子)」は、古い書き方ではありますが、基本を知っておくと他のプログラムを見るときにも役立ちます。

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる