こんにちは、ナナです。
「反復」とはプログラムが繰り返すためのものです。「反復」はプログラム用語で「ループ」とも呼ばれ、「分岐」と共に非常によく利用されるものです。
反復処理には主に「for文」と「while文」がありますが、本記事ではまずは「for文」から学んでいきます。
本記事では次の疑問点を解消する内容となっています。
では、for文を使った「反復」の使い方を学んでいきましょう。
Pythonによる反復:for文の書き方
はい、はーい。やってまいりましたっ、またもや『反復』!僕の出番ですよね。Pythonでも大活躍しちゃいますよー。
皆さん、彼は『反復』になると登場するんです。温かく見守ってやってください。
『順次』『分岐』に続き、最後の3大要素の『反復』だよ。それでは『反復』処理のためのfor文の書き方を学んでいこうね。
皆さんが生活をしていく中で「●●回まで、〇〇をしよう」といったことはよくあるシーンです。
このように「●●回まで」というシーンは、「反復」というシーンなのです。
プログラムにおいても回数を決めた「反復」のシーンを書くことができます。
for文の書き方と使い方
Pythonにおいて回数指定の反復は「for文」という構文を使って表現します。プログラムでは次のように記述します。
Pythonのfor文の書き方
for 変数 in 変数に値を順に入れる方法:
繰り返す処理
「変数に値を順に入れる方法」の場所には、反復を繰り返すための方法を指定します。
具体的な書き方をプログラムで示しましょう。0~4の数を順に表示するためのプログラムです。
for number in range(5):
print(number)
変数numberには繰り返す度に「0」から「4」の値が順に代入され、実行結果は次のものになります。このような、ループ回数を数える変数のことを「ループカウンタ」と呼びます。
0
1
2
3
4
range命令というものが出てきましたね。これが反復処理をするためのポイントになります。
値を順に変化させる方法はいくつかありますが、本記事の段階では最も代表的な「range命令」を使った指定方法を覚えましょう。
for文でrange命令を使うための3つの指定方法
ほい、ほーい。質問ですー。rangeって何なんでしょう?C言語では見たことのないものですよね。Pythonオリジナルですか?
そうだね。range(レンジ)とは英語で「範囲」という意味だね。つまり、数字の範囲を管理すための仕組みなんだよ。range命令を使うと、for文で繰り返し回数を変化させることができるんだよ。
for文を使って、指定回数分だけ反復するときによく利用されるのが「range命令」です。
range命令には3つの要素があり、「初期値」「終了値」「増加値」となっています。range命令を使うことで、数字の範囲を指定して順番に取り出すことができるようになります。
この命令には3つの利用パターンがあるため、それぞれ解説します。
range命令の使い方 その1:range(終了値)
range命令に1つの「終了値」を与える例が、一番シンプルな使い方です。
for number in range(5):
print(number)
0
1
2
3
4
この場合は最初に取り出される数字は「0」となり、順に1つずつ増加しながら指定した「5」になったら取り出し終了です。
注意すべきなのは終了値として「5」を指定した場合は、得られる数値は「0」「1」「2」「3」「4」までとなり、「5」は含まれないことです。
指定した「終了値」は含まれないこと!これは要注意ですよ。
range命令の使い方 その2:range(開始値, 終了値)
range命令に2つの「開始値」「終了値」を与える例が、次に紹介する使い方です。
for number in range(2, 5):
print(number)
2
3
4
繰り返しを行う際に最初の「開始値」を指定できるのが特徴です。
基本となるのが「0」から始めることです。シーンによっては自分で開始値を決めたい時もあるですよ。
range命令の使い方 その3:range(開始値, 終了値, 増加値)
range命令に3つの「開始値」「終了値」「増加値」を与える例が、最後に紹介する使い方です。
for number in range(1, 6, 2):
print(number)
1
3
5
繰り返しを行う際に最初の数字を増加させる「増加値」を指定できるのが特徴です。
増加した値が「終了値」以上になった段階で終了します。
「終了値」と「増加値」のみを指定するパターンはありません。必ずこの3パターンであり、指定する数値の順番で意味が決まります。
反復処理で使われる「break命令」と「continue命令」
ほほほーい。それでは、反復処理を途中で止めたり、途中で次の反復処理を実施することはできるんでしょうか?
C言語には「break」「continue」がありましたよね。あれです、あれ。
はい。あります。C言語と同じ「break命令」と「continue命令」ですね。C言語と考え方も使い方も同じなんですよ。
反復処理の中では、繰り返すための処理を制御するための特別なキーワードが使えます。これらをうまく活用することで目的のループ処理を行うようにします。
反復処理を途中で終了するための「break命令」
反復処理の途中で、なんらかの理由により反復処理を終了したい時に使うのが「break命令」です。
実際の使用例をプログラムと実行結果で示しましょう。次のように、break命令の基本は「if文」と組み合わせて利用します。
for number in range(10):
print(number)
# もし5になったらループ終了
if number == 5:
break
0
1
2
3
4
5
実際のプログラムにおける終了条件は様々ですが、このように「break命令」が実行されると対象となっている反復処理の外側に処理が移動します。
複数のループを組み合わせることを多重ループと呼びますが、breakを使うときは注意が必要です。
ループ①の中にループ②がある場合、breakで抜けられるのは所属しているループ処理に対してのみとなります。
所属しているループからしか抜けられないことに注意が必要です。
途中で反復処理を強制的に次に移行するcontinue命令
continue命令は、強制的に次のループへ処理を移すための命令です。
この条件を満たした場合は、次のループ処理に移行したいといった場合に使用します。
for num in range(10):
# 偶数の場合は次のループへ
if num % 2 == 0:
continue
# 奇数を表示している
print(num)
1
3
5
7
9
この処理ではループカウンタが奇数の場合、カウンタ値が表示されるようになります。ループカウンタが偶数である場合は次のループ処理に移行させています。
課題:for文による反復の使い方が学べたかを確認しよう
もしも、プログラムが上手く動かなくて困ったときは、答えを見るのではなく「デバッガ」の使い方を学びましょう。
この記事を見ると問題の解決技術が身に付きます。困ったときのオススメ記事です!
課題1:反復で数を表示
課題内容
- 変数「number」を作成し、反復処理にて「5」~「10」の数字を表示せよ。
- 表示内容は出力期待結果に従い出力すること。
出力期待結果
5
6
7
8
9
10
range命令で適切に数値を指定すれば簡単ですね。
for number in range(5, 11):
print(number)
数値の「10」を表示するためには終了値を「11」にする必要がありますよ。この指定方法に慣れておきましょう。
課題2:数をカウントダウンしながら表示
課題内容
- 変数「countdown」を作成し、反復処理にて「10」~「0」の数字を表示せよ。
- 表示内容は出力期待結果に従い出力すること。
出力期待結果
10
9
8
7
6
5
4
3
2
1
0
range命令の使い方を正しく理解していれば簡単ですね。
for countdown in range(10, -1, -1):
print(countdown)
カウントダウンするためには「増加値」を「-1」にする必要がありますね。「0」で終わりたいため、終了値は一つ先の「-1」を指定することになります。
課題3:多重ループを使って九九を表示
課題内容
- 画面に九九の結果を表示せよ。
- 表示内容は出力期待結果に従い出力すること。
print命令の使い方:桁指定の表示方法
数字の「5」と「15」を2ケタ指定で表示するには、次のようにします。
print("{:2d} ".format(5))
print("{:2d} ".format(15))
5
15
「5」の前に1つ空白があります。これが2ケタ表示ということです。
出力期待結果
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
for文を2つ組み合わせて作ります。縦と横の方向でループしているイメージを描くとよいでしょう。
# 縦方向のループ用
for num1 in range(1, 10):
# 横方向のループ用
for num2 in range(1, 10):
# 改行なしで2ケタ表示
print("{:2d} ".format(num1 * num2), end="")
# 1行分が終わったので改行を実施
print()
1行分の表示が終わったら、改行するためにprint()を実施しています。
九九は「1~9」の数字を繰り返したいため、開始値を「1」、終了値を「10」にすることでループを実現します。
C言語技術者が知るべきPython言語との違い:「for文」
すでにC言語を習得している人は、次のポイントに気を付けよう!
C言語ではfor文の指定で「初期化部」「反復条件部」「更新処理部」の3つを指定しましたが、Pythonではそれをrange命令で表現しています。