広告

【プログラミング入門】【Scratch】12日目 リスト

2022.10.10更新

Scratchでプログラミング入門のタイトル画像になります

プログラミングって難しい!?

そんな事はありません!

Scratch(スクラッチ)を使えばカワイイキャラクター達と一緒にブロックを組み合わせるだけで簡単にプログラミングのキホンを学ぶことができます!

インターネットにつながるパソコンがあればすぐに始められますので「プログラミング授業の参考にしたい!」「まずは軽いプログラミングに触れてみたい!」などなどぜひ当サイトをご利用ください。

リスト

今回はたくさんの変数を一気に扱う事ができる「リスト」について学んでいきます。

ほとんどのプログラミング言語に「配列(はいれつ)」とか「Array(アレイ)」とかいう名前で用意されているとても大事なプログラミングテクニックの一つになります。

リストを作ってみよう

さっそくリストを作ってみます。

リストの場所ですが、「変数」ブロックの下の方「リストを作る」をクリックします。

Scratchにおける配列、リストの使い方の説明画像1

普通の変数と同じように「すべてのスプライト用」か「このスプライトのみ」を選べるので使い方に合わせて作ってください。

名前は「くだものリスト」としました。

Scratchにおける配列、リストの使い方の説明画像2

リストを作るとこんな感じで表示されます。

Scratchにおける配列、リストの使い方の説明画像3

そしてリストをいじる為のブロックがどばっと表示されます。

Scratchにおける配列、リストの使い方の説明画像4

それではリスト用のブロックを使っていろいろといじっていきましょう。

リストに追加する

まずは空っぽのリストに何かを追加していきます。

Scratchにおける配列、リストの使い方の説明画像5

「りんご、みかん、バナナ、すいか、マンゴー」と追加してみました。

実行すると・・・、

Scratchにおける配列、リストの使い方の説明画像6

中身が入ったのが確認できましたね。

一つだけ表示してみよう

では一つだけ表示してみましょう。

Scratchにおける配列、リストの使い方の説明画像7

スペースキーを押した時に一つだけ中身を表示します。

実行すると・・・、

Scratchにおける配列、リストの使い方の説明画像8

指定した番号の中身が表示されましたね!

リストの中身を取り出したり表示したりするには「くだものリストの~番目」ブロックを使います。

そのまま旗を何回も押すとその分だけ中身が追加されてしまうので、プログラムの最初に「くだものリストのすべてを削除する」ブロックを使ってリストの中身を空っぽにしております。

一気に表示してみよう

ここからが本番です。

「繰り返し」と組み合わせる事によりリストの中身を一気に扱う事ができます。

ではやってみます。

カウントをする為の変数を一つ用意しておいてください。

リストに追加するトコロは一緒なので表示する部分だけを変更します。

Scratchにおける配列、リストの使い方の説明画像9

実行すると・・・、

Scratchにおける配列、リストの使い方の説明画像10

カンの良い方は気づいたかもしれませんが「くだものリストの~番目」に変数を使って指定すれば「繰り返し」でリストの中身を一気に処理する事ができます。

同じように内容を置き換えるブロックなどと組み合わせれば一気に中身を変更したりする事もできます。

数字も大丈夫です

もちろん数字でも大丈夫です。

あらためて数字用のリストを作成しておいてください。

Scratchにおける配列、リストの使い方の説明画像11

プログラムになります。

Scratchにおける配列、リストの使い方の説明画像12

実行すると・・・、

Scratchにおける配列、リストの使い方の説明画像13

数字も問題なく扱う事ができました!

数字なので中身の数字を計算に使うことなどもできます。

こんな感じでたくさんの変数をグループ分けして一気に扱う事ができるのが「リスト」になります。

今回はわかりやすいように「くだもの」とか「数字」とかでグループ分けしましたが、別に数字と文章がまざっていても大丈夫です。

内容を変えてみよう

内容を変えてみましょう。

内容を変えるには「数字リストの~番目を~で置き換える」ブロックを使います。

Scratchにおける配列、リストの使い方の説明画像14

実行すると・・・、

Scratchにおける配列、リストの使い方の説明画像15

内容を変更する事ができました!

他にもリストの途中に新しい内容を追加したり、削除したりするブロックなどもあるのでこのへんは試してみてください。

正しい呼び方

指定する番号の事を少し難しい言葉で「添え字(そえじ)」と言ったりします。

最初のプログラムで言うと添え字2番目は「みかん」、添え字4番目は「すいか」とかそんな感じです。

そしてリストの中身一つ一つを「要素(ようそ)」と言います。

同じく最初のプログラムで言うと

添え字2番目の要素は・・・「みかん」

みたいな感じになります。

なんとなく覚えておきましょう。

広告

リストを使ったプログラム

それではリストの使い方を工夫して7日目にやったクイズゲームをちょっとグレードアップしてみましょう。

問題の順番をランダムにして、一度出した問題は出さないようします。

答えは3択形式にします。

「問題用のリスト、答えの番号を入れる用のリスト、問題を出したかどうかを記録するリスト」の3つのリストを用意しておいてください。

Scratchにおける配列、リストの使い方の説明画像16

「問題リスト」・・・問題を入れる用のリスト

「答えリスト」・・・3択の答えの番号を入れるリスト

「問題だしたフラグ」・・・問題を出したかどうかを記録するリスト

こんな感じで用意しました。

その他繰り返し用の変数などを使いますがそれはその時に追加していきます。

それではやってみましょう。

スペースの都合上プログラムを分けてのせますが、すべてネコちゃんのプログラムで大丈夫です。

(1)問題と答えなどをリストに追加

問題と答えなどをそれぞれのリストに追加します。

Scratchにおける配列、リストの使い方の説明画像17

ひとまず問題は3問だけにしました。

プログラムの仕組みがわかれば問題数は簡単に増やせますのでご安心ください。

「答えリスト」ですがここには3択の答えの番号を「問題リスト」の場所に合わせて入れていきます。

そして「問題だしたフラグ」に9日目にやった「りんごがまだあるか?ないか?変数」と同じような考え方で

リストの内容が「0」・・・まだ出されていない問題

リストの内容が「1」・・・もう出した問題

のように設定して問題の場所に合わせて「0」か「1」を入れていきます。

最初はどの問題も出てないのでもちろん全て「0」ですね!

問題数が大量になった時などは「繰り返し」を使って一気に「0」を入れていくのが良いでしょう。

実行すると・・・、

Scratchにおける配列、リストの使い方の説明画像18

リストの中身はこんな感じになりますね。

(2)問題を順番に出していく

問題をランダムに出題する前に、今作ったリストと「繰り返し」を組み合わせて問題を順番に出すというプログラムを作ってみましょう。

これができれば少しいじれば問題をランダムに出す事もできるようになります。

普通の変数で「出題された問題数をカウントする変数、現在「問題リスト」の何番目の問題が出ているのか?を記録する変数」の2つの変数を用意しておいてください。

そしてプログラムの頭に初期化を追加します。

Scratchにおける配列、リストの使い方の説明画像19

「問題カウント」・・・出題された問題数をカウントします

「問題番号」・・・現在「問題リスト」の何番目の問題が出ているのか?を記録します

このように用意しました。

では問題を順番に出していきます。

Scratchにおける配列、リストの使い方の説明画像20

さきほどのプログラムに追加してください。

まずは問題を3回「繰り返す」ので「問題カウントが3になるまで」の繰り返しを作ります。

そして繰り返しの中で問題を順番に出していきます。

変数「問題番号」を使って「問題リスト」から順番に出題しているだけなのですが、ここで「問題リスト」に合わせて「答えリスト」を作ったトコロがポイントになってきます。

こうする事で「問題リスト」と同じ番号の「答えリスト」を調べるだけで答えがわかるようになります。

あとは入力された「答え」とを比べて「正誤判定」をして変数「問題カウント・問題番号」をともに一つずつあげていけば順番に問題を出す事ができますね!

実行すると・・・、

Scratchにおける配列、リストの使い方の説明画像21

問題が出されて・・・、

Scratchにおける配列、リストの使い方の説明画像22

正解!

Scratchにおける配列、リストの使い方の説明画像23

問題が出されて・・・、

Scratchにおける配列、リストの使い方の説明画像24

残念!

問題を順番に出す事ができました!

変数の値に注目しながら実行してみてください。

(3)問題をランダムに出していく

では今のプログラムをちょこっと変えて問題をランダムに出題していきます。

「問題ok」という名前の変数を用意して中身を「no」という内容で初期化しておいてください。

Scratchにおける配列、リストの使い方の説明画像25

ではメインテーマである「一度出した問題は出さないようにランダムに問題を出題する」部分のプログラムを説明します。

Scratchにおける配列、リストの使い方の説明画像26

その問題を出して良いか?を判定する変数「問題ok」の内容が「ok」になるまで繰り返します。

問題をランダムに出題するのは「乱数」ブロックを使えば解決できますね!

あとはその問題が前に出されているのかをリスト「問題だしたフラグ」の内容で判断します。

「0」ならまだ出されていない、「1」なら前に出されている、でしたね。

まだ問題が出されていなければ「問題だしたフラグ」を「1」にして変数「問題ok」の内容を「ok」にすれば繰り返しを抜けて次のブロックに進んで問題が出題されます。

そうでなければ、つまり一度出した問題だった場合は頭に戻って再度問題番号をランダムに取得すればそのウチまだ出されていない問題番号にたどり着くという仕組みになります。

シンプルなプログラムですが、100個、200個ぐらいなら順調に処理してくれます!(あまり多すぎるとたどり着くまでに時間がかかるようになるので注意です)

この部分をさきほどのプログラムの途中「問題カウントが3になるまで」の先頭に加えて・・・、

Scratchにおける配列、リストの使い方の説明画像27

プログラムの後半をちょっと変えれば

Scratchにおける配列、リストの使い方の説明画像28

ランダムに問題を出題するプログラムの完成です!

実行して「問題番号」と「問題だしたフラグ」の中身を見てみると・・・、

Scratchにおける配列、リストの使い方の説明画像29

問題を出した場所が「1」に変更されるのが確認できますね!

Scratchにおける配列、リストの使い方の説明画像30

出題されて・・・、

Scratchにおける配列、リストの使い方の説明画像31

残念!

問題がランダムに出題されるようになりました!

おまけ

さきほどのプログラムで問題数が増えた場合にまだ出していない問題を探すのにどのぐらい時間がかかるのかを実験したプログラムを作ってみました。

Scratchにおける配列、リストの使い方の説明画像32

コメントの部分の数字をテストしたい回数に全て同じ数で変更してください。

タイマーというのはプログラムを開始した瞬間から時間を計ってくれる便利な変数になります。

「調べる」ブロックにあります。

それではリストの要素数を「30000」個にして実行してみます。

結果は・・・、

Scratchにおける配列、リストの使い方の説明画像33

「18.21秒」

まあまあな時間ですね!

ちなみに

1000個だと・・・0.67秒

10000個だと・・・6.27秒

100000個だと・・・151.91秒

ぐらいの時間でした。

要素数1000個ぐらいまでは使えそうですね!

リストはプログラムを組む上でスゴイ大事なテクニックです。何回も練習して身につけましょう!

次回

13日目 その他のブロック

広告

Copyright 2016 K.N/petitetech.com