反復構造のプログラム

次は反復構造のプログラムですね。

反復構造を使うものの代表例として何かをカウントアップするプログラムがあります。
1,2,3…って数えていくようなプログラムってこと?


そうです。1,2,3…と数えていく,というのは「前の数に1をたすことを反復すること」ですよね?
あ,ほんとだ!


カウントすることで○番目のものを取り出す,とか,分岐と組み合わせてカウントしていき,ある条件と一致したときに特定の処理を行う,などができるようになり,プログラムの表現の幅を広げることができます。

それでは,カウントをするプログラムをフローチャートに表してみましょう。

1からスタートして1ずつ加算し,6未満の数値を表示(print)するプログラムです。

点線で処理を戻しているところが「反復」ですね。いろいろな書き方がありますが,「for」を使った書き方をみてみましょう。
forを使った例
- for x in range(1, 6, 1):
- print(x)

for x in range
の部分が繰り返しを表しているんだよね?


range
とは指定した長さの,連続した整数のリストをつくる関数です。
(1,6,1)
がその指定を表していて,「1から6未満の間の数を1ずつ増やしたリスト」,つまり,1, 2, 3, 4, 5のことを意味しています。
そこに反復を表すfor
をつけることで,「5回繰り返す」の意味になります。

()のなかの指定の数字は状況に応じて自由に設定できます。
つまり…例えば,
for x in range(1, 12, 2):
だったとしたら,
1から12未満の間の数を2ずつ増やす,つまり,1,3,5,7,9,11で6回繰り返すということ?


そうです,よくできましたね。プログラムに解説を書いておいたので,改めて確認しておきましょう。
forを使った例(解説付き)
- # x = 1からスタートする
- # x < 6 まで
- # xは1ずつ増やす
- for x in range(1,6,1):
- # xの値を表示する
- print(x)

この「#」の行が書いてくれた解説ね!


そうです。Pythonでは同じ行のなかで「#」より後ろをプログラムの記述から除くことができます。
これを「コメントアウト」といいます。
コメントアウトすることで,プログラムのなかにメモを残すことができます。

ちなみに,Pythonで四則演算もできます。以下のプログラムを実行してみてください。
四則演算を含んだforを使った例
- for x in range(1,6,1):
- print(x, x * 3) # xとx × 3の値を表示する


1 3
2 6
3 9
4 12
5 15
というふうに,1〜5と,その3倍の数が合わせて表示されると思います。
ひき算やわり算も同じですか?


全く同じだとわかりやすいんですけど…ちょっとだけ違うものもあるので,次の一覧を確認しておきましょう!
演算子
- + たし算
- - ひき算
- * かけ算
- / わり算
- // わり算(小数点以下切り捨て)
- % わり算のあまり
- ** べき乗(累乗)


反復構造の理解を深めるために,次の演習にもチャレンジしてみましょう!
演習1
- 2から15までの自然数を1ずつ増やすプログラムを作成しましょう。
- for x in range(2, 16, 1):
- print(x)

演習2
- 80までの自然数と,その数を3でわったあまりを表示するプログラムを作成しましょう。
-
出力例:
1 1
2 2
3 0
4 1
...(中略)...
80 2
- for x in range(1, 81, 1):
- print(x, x % 3)

for以外の反復プログラム(While)

for
を使ったプログラムと同じように,
while
を使って反復のプログラムを作ることもできます。
forとwhileは何が違うの?


forは何回繰り返すか決まっている場合,whileは条件を満たすまでずっと繰り返す場合に使います。
whileを使った繰り返し
- 80までの自然数と,その数を3でわったあまりを表示するプログラム
- forを使った例
- for x in range(1, 11, 1):
- print(x)
- whileを使った例
- x = 1
- while x < 11:
- print(x)
- x = x + 1

両方とも実行してみたら1から10までの数が表示されたけど...


そうですね。この場合どちらでも変わりませんね。ただ,while文は何回繰り返すかわからないときに使えます。 ゲームの戦いの場面などで,「相手の体力が0になるまで」というような条件設定をする場合ですね。
そうか,同じ繰り返しでも,「3回攻撃したら終わり」と「相手の体力が0になったら終わり」っていう条件設定の違いなんだね。


その通りです。ほかには,「正しいパスワードを入力するまでエラーメッセージを出す」というようなものも回数を決めない繰り返しですね。 反復のプログラムを作るときは,forを使うか,whileを使うか,考えて作りましょう。
分岐構造と反復構造を組み合わせたプログラム

ここまで学習した「順次」「分岐」「反復」を組み合わせることで,プログラムで表現できることが増えていきます。どんなことができるようになるか,想像できますか?
そうだな…組み合わせるんだから,反復でカウントして,出力された数を条件に分岐するとかそういうこと?

それってこの前にやったカウントするプログラムで,例えば3の倍数のときだけ何かする,とかそういうプログラムかな。


その通り!カウントしているもののうち,特定のものだけを取り出すイメージですね。

では,1から100までの数のうち,3の倍数だけを出力するプログラムを書いてみましょう。フローチャートにするとこうですね。
演習3
- 下の反復のプログラムを参考にしながら,
- 1から100までの数のうち,3の倍数だけを「x = ○」の形で表示するプログラムを作成しましょう。
- for x in range(1, 6, 1):
- print("x =", x)
- for x in range(1, 101, 1):
- if x % 3 == 0:
- print("x =", x)

演習4
- 1から50までの数のうち,偶数だけを表示するプログラムを作成しましょう。
- for x in range(1, 51, 1):
- if x % 2 == 0:
- print(x)

演習5
- 1から100までの数のうち,
- 3の倍数かつ5の倍数を「x = ○」の形で表示する
- プログラムを作成しましょう。
- for x in range(1, 101, 1):
- if x % 3 == 0 and x % 5 == 0:
- print("x =", x)


ここまでで,「順次」「分岐」「反復」を使った基本的なプログラムの学習はおしまいです。次からは少しだけ難しくなりますが,どんどんできることが増えていきますよー!