【勉強日記】ループをうまく使おう【第6回】

プログラミング

はじめに

今回の記事では、【第1回】プログラミングって何?で紹介したプログラムの流れの要素「順接・条件分岐・反復(ループ)」のうちの「反復(ループ)」について解説していきます(今回はpythonでの書き方をメインに説明します)。

プログラミング未経験や学び始めの方に読んでいただくことを前提として、つまずきやすい部分や、実際に使うときの注意点について説明していきます。

もくじ

  • ループ」はプログラムでどんなふうに使う?
    • 何度も同じ処理をするとき・・・一回で終わらないゲーム
    • 「ひとつずつ」値を確認するとき・・・リストからひとつずつ値を取り出す
  • ループの書き方① ~while文
    • while文のつかいどころ・・・一回で終わらないゲーム
    • 「break」文って何?・・・ループから抜ける
    • 「continue」文って何?・・・ループのなかでスキップする
  • ループの書き方② ~for文
    • for文のつかいどころ・・・リストからひとつずつ値を取り出す
  • ループ文を書く時の注意点(著者が詰まったところ)
    • 何のためにループをするのかしっかり考える……条件分岐と比べて一目でわかりにくい
    • どこまでがループ文の範囲か……何をどこまで繰り返しているのか?
    • 無限ループに注意する……whileとbreakはセットで考える
  • まとめ

「ループ」はプログラムでどんなふうに利用されるのか?

【勉強日記】プログラミングって何?【第1回】では、「プログラムは主に「順接」「条件分岐」「反復(ループ)」の3つの要素から成り立っている」と解説しました。

このうちの「反復(ループ)」は、実際のプログラム上でどのように使うのでしょうか。

何度も同じ処理をする・・・一回で終わらないゲーム など

「ひとつずつ」値を確認する・・・リストからひとつずつ値を取り出す など

たとえば「私が勝つまでずっと続くゲーム」など、何かをきっかけにしなければ終了しないプログラムなどは、ループを使って書くことができます(この場合、私が勝つまで1回のゲームが何度も繰り返されます)。

また、たくさんのデータを扱うなかで「ひとつずつデータを確かめていく」処理などにもループを使うことが多いです。

ループの書き方①~while文~

Pythonにおいて、ループを使うさいに登場するのがwhile文for文です。

・while文

何度も同じ処理をするプログラムを書きたい場合は、while文を使います。while文ではまず最初に条件を設定し、それが満たされている場合は処理が行われ続けます。

つまり、条件を満たす・満たさないによってループを続けたり終了させることができます。

上の画像の解説

上の画像は、カウント(count)が3未満の場合にループが繰り返されるプログラムです。

まず最初にcountという変数に0を代入します(変数について分からなくなった場合は 【勉強日記】変数って何?【第2回】を参考にしてください!)

そのあとwhile文に入っていきますが、このときcount=0です。

つまり「count<3」という条件を満たすので、while文の中の処理が行われます。while文のなかの最後の文まで処理が実行されると、もう一度while文の先頭(While count<3:)にもどります。これがループです。

このwhile文の処理は、現在のcountが表示(print)される→countに+1が行われるというものなので、次のループの開始時点ではcount=1になっています。このように、ループが行われるごとにcountの値が増えていくという仕組みです。

ループが繰り返され、count=3になると「count<3」という条件を満たしません。よって、ループに入ることができなくなります。よって、表示(print)は「0 1 2」で終了になります。

・break文って何?

count<3という条件があったとき、ループのなかでcountの値が変わる可能性があるからこそ、ループが続くか止まるかの処理に分かれます。しかし、条件が変わる要素を入れないと無限にループが続いてしまいます。

また、「ループの中に条件が変わっていく要素がない場合はどうしたらいい?」「もっと複雑な条件のときは?」「while文の途中でループを抜けるには?」どうすればよいのでしょうか。このような場合にはbreak文を使います。

上の画像の左では、while文の条件が「True」となっています。これは、「条件式が正しい」という意味で、この状態では無限にループが続いてしまいます。怖い!

画像の右のように、countが3以上になったらループを抜けるという処理にしたい場合、breakを使います。breakにたどり着くと、それ以降の処理は行われずにループが終了します。この場合の表示は「0 1 2」です。条件式をWhile Trueとした場合、必ずbreakを書きます。

・continue文って何? 

「ループを終わらせたくないけど途中で処理をスキップさせたい!」場合はcontinue文を使います。

continue文を使うことで、条件に当てはまる場合にcontinue以下の処理をスキップすることができます。上の画像では、count=2の場合のみcontinueが実行され、グレーの部分の処理がスキップされます。スキップしたあとはwhile文の先頭に戻ります。

ループの書き方②~for文~

では、条件を満たす限り続く処理のほかに、ループにはどのような使い方があるのでしょうか。もう一つが冒頭で説明した「ひとつずつ」値を確認する場合です。

「ひとつずつ値を確認する」とループにどのような関係があるのでしょうか?

たとえば、たくさんの値をリストから取り出したい場合を考えてみます(リストについて忘れてしまった方は【勉強日記】リストをうまく使おう【第4回】を参考にしてみてください!)

リストから値を取り出す場合、ひとつふたつなら場所(インデックス)を指定して取り出せますが、多くなってくると大変です。そこで、リストからひとつずつ順番に値を取り出すときに使うのがfor文です。ひとつの値を取り出すのが1ループです。この1ループを繰り返すことによって順番に値を取り出すことができます。

ループを書くときの注意点(著者が詰まったところ)

・何のためにループをするのかしっかり考える…条件分岐と比べて一目でわかりにくい

プログラムの構成要素のうちの「条件分岐」は「もし~」のif文で直感的にどんな処理をしているか把握しやすいですが、「ループ」は一見何のために処理を繰り返しているのかわかりづらいところがあります。特にfor文などは「なんのためにfor文を使って値を取り出すのか?」など整理しながらプログラミングを進めると後で混乱がありません。

・どこまでがループ文の範囲か 何をどこまで繰り返しているのか?

While文では、どこまでの処理を繰り返すのか?ここでbreakでループを終了するとどこの処理へ続くのか?continue文でスキップするとどこに飛ぶのか?の「範囲」を意識するとミスを減らすことができます。ループの範囲を常に意識すると、処理の流れが理解しやすくなり、全体の見通しが良くなります。

・無限ループに注意する whileとbreakはセットで考える!

While文では、基本的に「繰り返す」がデフォルトになっているので、「どこかで止める」意識を持っておくと無限ループを防ぐことができます。もし無限ループになってしまった場合はctrl+C(Macの場合はcontrol+C)で処理を終了することができます。

まとめ

何度も同じ処理を行う場合やひとつずつ」値を確認する処理には「ループ」を使います。

pythonでのループの書き方にはwhile文とfor文があり、while文ではbreakやcontinueを使ってループの処理をコントロールすることができます。また、リストなどから値をひとつずつ取り出す場合はfor文を使います。

ループ文を書くときは、「何のためにループ文を書くのか?」「どんな処理をどこまでの範囲で繰り返すのか?」の理由と範囲について考えるとプログラム全体の見通しが良くなります。

また、whileとbreakはセットで考えると無限ループを防ぐことができます。ループをあらゆる部分で自由に扱えるようになると、プログラムへの苦手意識が薄れると思いますので、簡単な部分からぜひ活用してみてください。

ここまで読んでくださってありがとうございました!

コメント

タイトルとURLをコピーしました