【マイクロビット入門】(13)並んだデータを扱ってみよう。(「配列」とは?)

マイクロビット

 タイトルに「並んだデータ」って書いてありますが、どういうことですか?

 例えば「一時間ごとの気温」のように、たくさんのデータが順番に並んだもののことだ。この「並んだデータ」を上手く扱うことで、マイクロビットに様々な機能を持たせることができるのだ。

 なんだか漠然としていて、ピンとこないですね。

 では、実際のプログラムで試してみよう。

並んだデータの例:音楽の演奏データ

 「並んだデータ」の具体例として、音楽の演奏データを見てみよう。マイクロビットに音楽を演奏させたのは覚えているかな?

 ベートーベンの「運命」を演奏させましたね!(以下をご覧ください。音楽を演奏させるためのスピーカーの接続方法も説明してあります。新しいタブで開きます。)

【マイクロビット入門】(10)マイクロビットの機能を使ってみよう。

 この時は、マイクロビット用ライブラリにあらかじめ用意されたデータを使用したのだが、オリジナルの曲も演奏させることができるのだ。

 そういえば、そんな話もあったような。マイクロビットのホームページに書かれているのでしたね。(以下をご覧ください。新しいタブで開きます。)

英語版:https://microbit-micropython.readthedocs.io/en/latest/

日本語版:https://microbit-micropython.readthedocs.io/ja/latest/index.html

 この中から、オリジナル曲の演奏を行うためのプログラムを見てみよう。

  • _1行目 import music
  • _2行目 tune = [“C4:4”, “D4:4”, “E4:4”, “C4:4”, “C4:4”, “D4:4”, “E4:4”, “C4:4”, “E4:4”, “F4:4”, “G4:8”, “E4:4”, “F4:4”, “G4:8”]
  • _3行目 music.play(tune)

 マイクロビットにプログラムを書き込んで・・・(マイクロビットにプログラムを書き込むには、パイソンエディターを使います。詳しくは以下をご覧ください。新しいタブで開きます。)

【マイクロビット入門】(2)パイソンエディターを使ってみよう。

 音楽が鳴りましたよ!「グーチョキパーで何作ろう♩」の曲ですね!

「配列」とは?

 先ほどのプログラムの1行目は「import」文なので、音楽のライブラリの組み込んでいて、3行目で演奏しているのですね。2行目は見たことがないヤツですが・・・

  • _1行目 import music
  • _2行目 tune = [“C4:4”, “D4:4”, “E4:4”, “C4:4”, “C4:4”, “D4:4”, “E4:4”, “C4:4”, “E4:4”, “F4:4”, “G4:8”, “E4:4”, “F4:4”, “G4:8”]
  • _3行目 music.play(tune)

 この2行目が「並んだデータ」なのだ。”C4:4″、”D4:4”などのデータが、「,」で区切られて並んでいる、という訳なのだ。

 ウーン、分かったような、分からないような・・・ところで、”C4:4″とかって、一体どういうものなのですか?

 これは、曲の中の一つの音を表している。「C」が音階を表しており、最初の「4」がオクターブ、次の「4」が音を鳴らす長さを表している。音階には「C#」なども使えるのだ。

[音階][オクターブ]:[音を鳴らす長さ]

 すなわち、”C4:4″は、一つの音符を表すデータなのだ。

 音符のデータが並んでいる、ということですね・・・そうか、楽譜ということになりますね!

 その通りだ!プログラムの2行目では、この楽譜を「tune」という変数に格納している。

  • _2行目 tune = [“C4:4”, “D4:4”, “E4:4”, “C4:4”, “C4:4”, “D4:4”, “E4:4”, “C4:4”, “E4:4”, “F4:4”, “G4:8”, “E4:4”, “F4:4”, “G4:8”]

 音符データの並びを「[」と「]」でくくってひとまとまりとして、「tune」という変数でひとまとめに扱えるようにしているのだ。

 ということは、3行目では、「tune」という楽譜を音楽ライブラリの「music.play()」という関数に渡して、演奏してもらっている、ということになるのですか?

  • _3行目 music.play(tune)

 ウム、その通りだ。そして、この並んだデータを「[」と「]」でくくって作った変数には、「配列」という名前が付けられているのだ。

 「配列」というのは音符のデータが集まった楽譜のような「並んだデータ」ということなのですね。

「リスト」と「タプル」

 実は、パイソンの「配列」には、「リスト」と「タプル」の2種類がある。

 また、ややこしい話が出てきましたね・・・

 ここでは簡単に違いを説明しておこうと思う。

 お手柔らかにお願いします。

 「リスト」は、中のデータを後で変更することができる。一方、「タプル」は後で変更することができないのだ。

 フムフム。作った後で変えられるかどうかの違いかぁ・・・。

 「リスト」は「[」と「]」でデータをくくって作るが、タプルは「(」と「)」を使う。

リスト

 tune = [“C4:4”, “D4:4”, “E4:4”, “C4:4”,・・・・]

タプル

 tune = (“C4:4”, “D4:4”, “E4:4”, “C4:4”, ・・・・)

 さっきの楽譜データは「リスト」だったのですね?

 イエ~ス。ちなみに「music.play()」はタプルの楽譜データも再生できるのだ。

  • _1行目 import music
  • _2行目 tune = (“C4:4”, “D4:4”, “E4:4”, “C4:4”, “C4:4”, “D4:4”, “E4:4”, “C4:4”, “E4:4”, “F4:4”, “G4:8”, “E4:4”, “F4:4”, “G4:8”)
  • _3行目 music.play(tune)

 マイクロビットに書き込んで・・・本当だ!ちゃんと演奏されましたね!

 当面は「リスト」を使ってプログラムを作成していこうと思う。

 リョーカイです!

「リスト」をつなげてみよう。

 「配列」には、様々な操作を行うことができる。例えば、複数の「リスト」をつなげて、新しい「リスト」を作ることができる。

 そんなこともできるのですか!では、さっきの「グーチョキパー」の歌の続きも繋げられますね!

 さっそくやってみよう。ちなみにオクターブと音を鳴らす長さは、省略することもできる。省略すると、ひとつ前の音と同じになるのだ。

  • _1行目 import music
  • _2行目 tune1 = [“C4:4”, “D”, “E”, “C”, “C”, “D”, “E”, “C”, “E”, “F”, “G:8”, “E:4”, “F”, “G:8”]
  • _3行目 tune2 = [“G:2”, “A”, “G”, “F”, “E:4”, “C”]
  • _4行目 tune3 = [“C:4”, “G3”, “C4:8”]
  • _5行目 tune = tune1 + tune2 + tune2 + tune3 + tune3
  • _6行目 music.play(tune)

 ここには出てこないけど、音階を「R」とすると休符になるのだ。

 5行目で「tune2」と「tune3」を二つづつ足しているのはどういうことですか?

 これは、繰り返しの部分を1つだけ作っておいて、二つ足すことで繰り返しの楽譜データとしているのだョ。

 マイクロビットに書き込んで・・・続きも演奏されましたね。いろいろな曲を作れそうですね!

まとめ

 「配列」のまとめなのだ。

  • 「配列」は並んだデータを一つの変数にまとめたもの。
  • 「リスト」と「タプル」がある。「リスト」は後で変更できるが、「タプル」は出来ない。
  • 「リスト」を作るときは、データを「[」と「]」でくくる。
  • 「タプル」を作るときは、データを「(」と「)」でくくる。
  • 複数の配列を「+」でつないで新しい配列を作ることができる。

 次回もお楽しみに~

コメント

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