【マイクロビット入門】(8)やればできるよ!関数を作ってみよう。

パイソンでマイクロビット

 前回は、関数を紹介した。今回は、実際に関数を作ってみようと思う。

 前回の予告通り、関数を作るんですね。とにかく、やってみましょう!

まずは、関数を作ってみよう。

 今回もサンプルプログラムから始めよう。まずパイソンエディターを開こう。

 すると、サンプルプログラムが表示されているはずなのだ。

  • 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)

 毎度おなじみのやつですね。

 ループの中身の6行目から8行目を関数にしてみるぞ。

いきなり来ましたね!

うむ。関数を作るには、まず「def」と書いて、そのあとに関数名を書くのだ。

フムフム。「def」の次に関数名ですね。

def [関数名]

次に、「(」、引数、「)」と続けるのだ。引数というのは、この関数にデータを渡すために使うものなのだ。

引数?データを渡す???

def [関数名]([引数])

うむ。詳しくは後で説明するとして、まずは関数の作り方の説明を続けるぞ。

え、まだ続くのですか・・・

もうあと少しだ。最後を「:」で締めれば完成だ。赤トマト君、やってみるかい?

def [関数名]([引数]):

 分かりました。関数名は「tomato」で、引数は「tane」にしてみます。サンプルプログラムに追加すればよいのですね。

  • 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)
  • 9行目
  • 10行目 def tomato(tane):

 出来ました!これでいいのでしょうか?

 イイね!ここまではOKだ。次は関数の中身を作ってみよう。

 な、中身?どういうことでしょうか?

 関数が処理する内容のことだ。

 ?????

 では、やってみるぞ。こういうことになるのだ。

  • 5行目 while True:
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 def tomato(tane):
  • 11行目  display.scroll(‘Hello, World!’)
  • 12行目  display.show(Image.HEART)
  • 13行目  sleep(2000)

 6行目から8行目が11行目から13行目にコピーされましたね。これが中身なのですか?

 そういうことだ。ちなみに関数の中身は、ブロックとして記述する必要がある。つまり、インデントしないといけない、ということなのだ。

 インデント?字下げのことですね。これで出来上がりですか?

 実は、もう一つポイントがあるが、それは動かして確認してみよう。

関数を呼び出してみよう。

 作った関数を動かすために、この関数を呼び出す部分を追加してみよう。

 呼び出し?ですか???

ウム。関数は作っただけでは何もしてくれない。

そうなんですか!

呼び出すことで、初めて関数の中身を動かすことが出来るのだ。

で、どうやって呼び出せばよいのですか?まさか、おまじないを唱えるとか・・・

 うむ。例えば赤トマト君が作った「tomato」を呼び出すには、プログラムの中に「tomato(0)」と書けばよいのだ。

「tomato」は関数名なので、関数名を書けばよいのですね!

そうなのだ。なかなか飲み込みが速いね。

 カッコの中に0と書かれてますが、この0は一体どういうことなのだろう?

これが最初に出てきた引数なのだ。

「関数にデータを渡すために使う」って言ってたやつですね。

 うむ。赤トマト君が作った関数「tomato」には「tane」という引数があるので、何か値を入れておく必要があるのだ。

では、なんで0を入れたのですか?

引数に居れるデータは関数の中身に合わせて選ぶ必要がある。「tomato」の場合はどんな値でもOKだ。

 では0でなくてもよいのですか?

 ィエース。引数については、後でまた説明するが、ここではひとまず0としておく。

  • 5行目 while True:
  • 6行目  tomato(0)
  • 行目
  • 8行目 def tomato(tane):
  • 9行目  display.scroll(‘Hello, World!’)
  • 10行目  display.show(Image.HEART)
  • 11行目  sleep(2000)

 うーん、分かったような、分からんような。これで完成ですか?

 いや、ここで修正なのだが、関数は呼び出される部分より前に記述されていないといけないのだ。

 ????

 つまり、こうなるのだ。

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目  tomato(0)

 8行目からの関数が5行目の「while True:」の前に移動したのですね。

 では、動かしてみよう。

 マイクロビットをつないで「Flash」すると・・・サンプルプログラムと同じ動きをしていますよ。

 うむ。ループの中身を関数に移しただけなので、同じ動きとなるのだ。

処理の流れを見てみよう。

 いまいち、よく分からないのですが。

 そのようだね。では、このプログラムの処理の流れを確認しよう。今回作成したプログラムは、以下の通りだ。

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

 ところで、マイコン君を覚えているね。

 サンプルプログラムの時に登場した人ですね。電源を入れると起きるのでしたね。

(サンプルプログラムについては以下をご覧ください。新しいタブで開きます。)

 その通り。電源が入る前は、マイコン君は寝ている。

 電源を入れると起きる。ここまではサンプルプログラムと同じだ。

 ふむふむ。で、5行目の関数の部分に来るのですね。

 その通りだ。5行目から8行目には、関数が記述されている。関数の中身は、「Hello,World!」の表示と、

 ハートの表示と、

 2秒間何もしないで待つことだ。

 じゃあ、ここで「Hello,World!」を表示して、ハートを表示して、2秒待つのですか?

 いや、ここではまだこれらを行う訳ではない。「tomato」という関数が呼び出されたら、初めてこれらが行われるのだ。

 そうなんですか!

 次に、ループに入る。

 10行目に来たわけですね。

 そして、11行目の「tomato(0)」によって、先ほどの「Hello,World!」を表示して、ハートを表示して、2秒待つ処理が行われるのだ。

 なんとも、かんとも。

 関数は、呼び出されて初めて実行される、ということを試してみよう。試しに11行目をコメントアウトしてみてくれたまえ。

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(‘Hello, World!’)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目 #  tomato(0)

 マイクロビットに「Flash」すると・・・何も表示されませんね。

 関数「tomato」が呼び出されないので、何も行われない、ということになるのだ。

引数を使ってみよう。

 ところで、今回の関数には、「tane」という引数が用意されている。

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

 はぁ、勢いでそのように打ち込んでしまいました。

 これを使ってみようと思う。引数を使うことで、関数の動きを変えることができる。

 そんなことができるんですか!

 現状では「Hello,World!」と表示されているが、これを変えられるようにしてみよう。以下としてみてくれ。そして、11行目のコメントアウトを元に戻してくれたまえ。

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(tane)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目  tomato(0)

 これをマイクロビットに「Flash」すると・・・「Hello,World!」の代わりに「0」と表示されますね!

 呼び出しの部分で「tomato(0)」としているからね。[(0)」の代わりに何か言葉を入れてごらん。シングルクオーテーション「’」で囲うのを忘れてはいけないよ。

 では、「Honjitu ha seiten nari」としてみると・・・

  • 5行目 def tomato(tane):
  • 6行目  display.scroll(tane)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目   tomato(‘Honjitu ha seiten nari’)

 「Honjitu ha seiten nari」と表示されましたね!でも、なんだかプログラムがややこしくなっただけのような・・・

 関数の便利さは、プログラムに似たような処理をいくつか組み込んでみると分かると思う。

 ふむふむ。

 という訳で、次回は、ボタンを使って表示内容を変えるプログラムを作ってみるよ。

 ついにボタンを使うんですね!

今回のまとめ

 今回のまとめだよ~。

  1. 関数の先頭部分は def [関数名]([引数]): と記述する。
  2. 関数の中身はインデントされたブロックとして記述する。
  3. 関数は呼び出されるより前に記述する必要がある。

 今回作ったプログラムは、

  • 1行目 #Add your Python code here. E. g.
  • 2行目 from microbit import *
  • 3行目
  • 4行目
  • 5行目 def tomato(tane):
  • 6行目  display.scroll(tane)
  • 7行目  display.show(Image.HEART)
  • 8行目  sleep(2000)
  • 9行目
  • 10行目 while True:
  • 11行目  tomato(’Honjitu ha seiten nari’)

 でぇ~す!

つづく

参考

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

PR

コメント

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