【マイクロビット入門】(6)ループをぐるぐる回してみよう。

マイクロビット

 前回は、条件式というものを紹介した。今回は、前回保留となってしまった赤トマト君の質問「Trueとループにいったい何の関係が?」について答えていこうと思う。

 気になって、気になって、夜も眠れな~い!なんつって。

whileって、なんなのさ?

 毎回恒例のサンプルプログラムだ。

  • 1行目 #Add your Python code here. E. g.
  • 2行目 from microbit import *
  • 3行目
  • 4行目
  • 5行目 while True:
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)

 今回は5行目の「while True」の「while」についてだ。赤トマト君、「while」って、何だと思う?

 「While」だから、「~する間」ということですか?

 なかなかやるね、赤トマト君。その通りだ。

 「while ***:」は、「***」が正しい間は繰り返す、ということなのだ。

 ふむふむ。「True」が「正しい」で、結果が「正しい」「間違い」となるのは「条件式」なので、「***」には「条件式」がはいる、とか・・・なんつって。

 その通り!赤トマト君、大正解だぞ!

 じゃぁ、前回「条件式」の説明をしたのは、今回の前振りだったとか?

 そうなのだ。「条件式」が分からないと、「while」を説明できなかった、という訳なのだ。

 「while」で繰り返されるのは、「while」の後のインデントされた文でしたね。

  • 5行目 while True:
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)

 よく覚えていたね。サンプルプログラムでは、6行目から8行目の部分だ。このようにインデントでまとめられた文の集まりを「ブロック」という。ここまでをまとめておく。

  • while [条件式]:
  •  条件式が「正しい」間、繰り返す。
  •  繰り返されるのは、while文の後のブロック

サンプルプログラムの「while true」について

 「while true」の場合は、条件式が「true」ということなのですか?

 そうだ。常に答えが「正しい」になる式、ということだ。定数(一定の値)も式の1種と考える、ということなのだよ。

 じゃぁ、「while true」がなくなるとどうなるんだろう?

 よし、試しにやってみよう。

パイソンエディターを新しいタブで開く

 サンプルプログラムの5行目の先頭に「#」を入れてみてくれたまえ。

  • 1行目 #Add your Python code here. E. g.
  • 2行目 from microbit import *
  • 3行目
  • 4行目
  • 5行目 #while True:
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)

 出来ました!マイクロビットに「Flash」!

 なんかエラーみたいですよ。「Line 6 IndentationError unexpected indent」という表示が出ましたよ。

 whileがないのにインデントしているので、エラーとなってしまったようだな。インデントを削除してみよう。

  • 1行目 #Add your Python code here. E. g.
  • 2行目 from microbit import *
  • 3行目
  • 4行目
  • 5行目 #while True:
  • 6行目 display.scroll(‘Hello, World!’)
  • 7行目 display.show(Image.HEART)
  • 8行目 sleep(2000)

 これでどうだ?「Flash」!今度は、1回だけ「Hello,World」と表示されて、ハートのままになってしまいました。

 ループがないので、プログラムが8行目まで実行された後、マイクロビットがやることがなくなってしまったのだ。

 マイクロビットがやることがなくなった?この後どうなるのですか?

 もう、何もしなくなってしまうのだ。マイコンのプログラムを作るうえでは、サンプルプログラムの5行目のような無限ループを組み込むことがとても重要ということなのだ。

他にもwhileを使ってみよう。

 「while」は、無限ループを作るということ以外にも使えるぞ。以前作った変数「a

」で計算するプログラムを覚えているかい?

 これですね。

  • 1行目 #Add your Python code here. E. g.
  • 2行目 from microbit import *
  • 3行目
  • 4行目 a=0
  • 5行目
  • 6行目 while True:
  • 7行目 # display.scroll(‘Hello, World!’)
  • 8行目  display.scroll(a)
  • 9行目  sleep(2000)
  • 10行目  a=a+1

 「while」を使って、「a」を0から3まで増やして、0に戻すプログラムにしてみるぞ。

  • 1行目 #Add your Python code here. E. g.
  • 2行目 from microbit import *
  • 3行目
  • 4行目 a=0
  • 5行目
  • 6行目 while True:
  • 7行目   while a <= 3:
  • 8行目    display.scroll(a)
  • 9行目    sleep(2000)
  • 10行目    a=a+1
  • 11行目  a=0

 元の7行目はコメントアウトされているので、削除した。代わりに、「while a <= 3:」とした。これは、「a」が3以下の場合は繰り返す、という意味だ。

 8行目から10行目が大分後ろに下がってますけど・・・

 これは、インデントが2つ入っている、ということだ。

 そういうことですか。でも、なぜ2つもインデントが入っているのですか?

 解説しよう。ややこしいので、しっかりついてきてくれよ。

 頑張ります!

  • 6行目 while True:
  • 7行目   while a <= 3:
  • 8行目    display.scroll(a)
  • 9行目    sleep(2000)
  • 10行目    a=a+1
  • 11行目  a=0

 まず、6行目の「while」に対して7行目から11行目のブロックが繰り返すようになっている。

 そして、7行目の「while」に対しては8行目から10行目のブロックが繰り返すようになっているのだ。

 7行目がすでにブロックの中にあるので、8行目から10行目はさらにブロックの中に入れないといけないのだ。つまり、ブロックの中に、さらにブロックがある、ということだ。

 マトリョーシカみたいに入れ子になっているんですね。

 マトリョーシカとは、うまいことを言うね。では、実行してみてくれたまえ。

 了解!「Connect」して、「Flash」!数字が0、1、2、3と増えて、

 0に戻った!ありがとう、マトリョーシカ!

今回のまとめ

 今回の内容をまとめておくぞ。

  1. while [条件式]:でループを作れる。
  2. マイコンのプログラムには無限ループが必要。
  3. インデントが入った文の集まりをブロックという。
  4. ループで繰り返されるのはブロック。ブロックの中に、さらにブロックを入れられる。

つづく

参考

プログラムを保存すると、ダウンロードフォルダーに「microbit_program(番号)」というファイルがどんどん作られていきます。これを整理する方法については、以下をご覧ください。

【マイクロビット】保存したプログラムを整理しよう。

コメント

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