【マイクロビット入門】(15)「for」ループで配列を扱おう。【マイクロビット入門】(15)「for」ループで配列を扱おう。今回は「for」文によるループで「配列」を扱ってみるぞ。前回言っていたやつですね。「for」文とは?前回作ったプログラム「for」文で時計を動かしてみよう。「while」文のメリットはないのか?まとめ「for」文とは?「for」文は、配列のすべての要素を個別に扱うループを作るための文なのだ。[配列名]:配列の要素の数だけ繰り返す。繰り返されるのは、for文の後のブロック配列の各要素が先頭から順に変数にコピーされる。(「ブロック」は、インデントされた文の集まりのことです。詳しくは以下を見てね。(新しいタブで開きます。)【マイクロビット入門】(6)ループをぐるぐる回してみよう。「変数名」と「配列名」というのが出てくるのですが、どういうことなのでしょうか?「配列名」というのは、「for」ループの対象となる配列の名前なのだ。ここに対象の配列名を書けばよいのだ。コレは何となく想像していました。「変数名」で指定された変数には、配列の各要素が先頭から順にコピーされるのだ。何を言われているのか、全くわかりませ~ン!具体例で説明した方が良さそうだね。前回作ったプログラムのループ部分を「for」文で書き換えてみよう。前回作ったプログラムを思い出してみるよ。前回作ったプログラム前回は、「while」ループを使って配列「hari」に格納された時計の針のイメージを順番に表示するプログラムを作成した。これがその全文ですね。マイクロビットのAボタンが押されると、LED表示部分で時計の針が一回転するのでしたね。Clock()2行目で配列「hari」に時計の針の1時から12時までのイメージが格納される。12行目でAボタンが押されたことを判定し、4行目~9行目の関数「Clock()」が呼び出されるのだ。関数「Clock()」では、6行目がループの「while」文で、7行目~9行目のブロックで配列「hari」に格納された時計の針のイメージが順に表示されるのでしたね。このプログラムの4行目~9行目を改造してみよう。「for」文で時計を動かしてみよう。先ほど説明したが、「for」文を作るには、「配列名」と「変数名」を指定しないといけない。[配列名]:先ほどのプログラムを改造する場合は、「配列名」は「hari」でいいのですか?イエ~ス、その通りなのだ。「変数名」は?5行目に「a」という変数がありますが、もしかしてこの「a」ですか?残念ながら「a」ではない。変数「a」は、配列「hari」の何番目の要素を扱うのかを表すインデックスなのだ。他に変数はないような・・・ここで指定する変数名は、まだ使われていない新しいものを使用する。hari:となるのだ。次は、「for」文に続くブロック(7行目~9行目)を改造するのだ。17行目の「display.show()」に渡す変数が「hari[a]」から「b」に変わりましたね?ウム。「for」文の変数「b」で、配列「hari」の要素を前から順にコピーされる。すると、変数「b」の中身は、ループが回るにつれて、以下のように変化するのだ。hari[11]配列のインデックスが0から始まることに注意してくれたまえ。ループが回るごとに、変数「b」の中身が変わっていくのですね。ループの13回目以降はどうなるのですか?今回作成した配列は要素が12個格納されている。従って、ループは12回実行されたら終了するのだ。いうことは、「for」文では、配列を指定すれば、ループの回数は自動的に決まる、ということですね!配列にいくつ要素が入っているかを気にしなくてもよいのが、「for」文のメリットなのだ。17行目の「hari[a]」が「b」に置き換わるので、インデックスとして用意した変数「a」が不要となる。そのため、5行目と9行目も不要となるのでコメントアウトしたのだ。コメントアウトした部分を削除して全文を掲載してみます。Clock()関数「Clock()」が随分シンプルになりましたね!「while」文のメリットはないのか?ループで配列を扱う場合は「for」文を使う方が良さそうですね。プログラムがシンプルになりますし。配列の要素を前から順番に取り出して使う場合は「for」文が良いね。「for」文ではない方がいい場合もあるのですか?例えば配列を後ろから順番に使いたい場合は「for」文は使えず、「while」文を使う必要があるのだ。配列を後ろから使いたいことなんて、あるのですか?今回のプログラムを例に考えてみよう。時計の針を反対周りに動かしたい場合はどうかな?確かに!後ろから表示すると、反対周りに動きそうですね。プログラム2に、Bボタンを押すと針が反対周りに回る機能を追加してみたのだ。CounterClock()9行目~15行目に「CounterClock()」という関数を追加したのだ。配列「hari」の要素を指定するために、10行目で変数「a」を用意している。11行目~15行目が「while」ループですね。変数「a」が0以上の場合にループする、ということなのですか?「a」が0以上だと、ずーっと回り続けるのでは???まず10行目を見てみよう。変数「a」には、最初に11が格納される。14行目で変数「a」に格納された値を1減らしている。ループが回るごとに変数「a」の値は減っていくのだ。display.show(hari[11])と、いうことは・・・そうか!変数「a」の値が11から徐々に減って、マイナスになったらループから抜ける、という訳ですね!正解デス!そして、変数「a」は11から徐々に減っていくので、配列「hari」の要素が後ろから表示されるのだ。すると、針の位置が12時のイメージから始まって、11時、10時と表示され、時計が反対に回るのですね。display.show(hari[11])配列「hari」の最初の要素は、時計の針が1時を指しているイメージなのだ。15行目がないと、逆回転した後、1時の位置で針が止まってしまう。これだと、ちょっと見栄えが良くないですね。見栄えを良くするために、最後に12時のイメージを表示するようにした、ということなのだ。マイクロビットで動かしてみると・・・ちゃんとBボタンで逆回転しますね。まとめ今回のまとめデ~ス「for」文により、配列の各要素を前から順番に扱うプログラムをシンプルに作ることができる。「for」文を使う場合は、インデックスの変数が不要となる。作りたいプログラムに応じて「for」文と「while」文を使い分けよう。【マイクロビット入門】(16)ループの流れを変えてみよう。関連記事マイクロビット【マイクロビット入門】(8)関数を作ってみよう。教育用マイコンボード「マイクロビット」のプログラミングを解説します。使用言語はパイソンです。今回は、実際に「関数」を作ってみます。自分で作れるようになってしまえば、「関数」も怖くない!読んでみてね。マイクロビット【マイクロビット入門】(14)配列の要素とインデックス教育用マイコンボード「マイクロビット」のプログラミングを解説します。使用言語はパイソンです。前回に引き続き、今回も配列について説明します。配列を用いてマイクロビットのLED表示部で時計の針を一回転させます。配列をより深く理解しよう。教育用マイコンボード「マイクロビット」のプログラミングを解説します。使用言語はパイソンです。今回はグローバル変数とローカル変数について説明します。関数内でグローバル変数の値を変更する方法についても説明します。プラモの飛行機のプロペラのプログラム:回転が徐々に遅くなって止まるバージョンマイクロビット、パイソンのプログラミング応用編で作成したプログラムのソースです。プラモの飛行機のプロペラを回すプログラムを改良しました。プロペラを停止させるとき、徐々に回転数を下げてから停止させるようにしました。マイクロビット【マイクロビット応用】[8.1]キッチンタイマーのプログラム:追加した回路の確認用プログラムマイクロビット、パイソンのプログラミング応用編で作成したプログラムのソースです。追加した回路の動作を確かめるのに使用したプログラムです。マイクロビット【マイクロビット入門】(3)サンプルプログラムを見てみよう。教育用マイコンボード「マイクロビット」のプログラミングを解説します。プログラミングに用いるツール「パイソンエディター」を開くと、最初にサンプルプログラムが表示されます。これを例にとり、そもそもプログラムってどんなものなのかを説明します。全体の流れを理解してみよう。難しくないので、見に来てね。【マイクロビット入門】(16)ループの流れを変えてみよう。コメントをキャンセルメールアドレスが公開されることはありません。※サイト上に表示された文字を入力してください。for」文とは?前回作ったプログラム「for」文で時計を動かしてみよう。映画などを見て、登場する乗り物をプラモで作ります。マイクロビットという教育用マイコンを使ったプログラミング入門の記事も書いていきます。青木鳥をフォローする無断転載を禁止します。道具ホーム検索トップサイドバータイトルとURLをコピーしました。