見出し画像

【GAS基礎編23】GASの基本後半戦!これまで学んだことのテスト

おはようございます!MARIEです(`・ω・´)ゞ

前回の記事でも予告をしていた通り、今日はテストの会です!
復習は済んでおりますか(゜-゜)??
テストの中身は今まで覚えたこと&関数となっているので、これができたら、今までの努力が報われますね(ノД`)・゜・。

テストはこちら

MARIEちゃんはバス釣りの大会に出ました。
結果は、バス30匹、ブルーギル20匹、雷魚10匹が釣れました。
釣った魚の平均数が20匹以上だと秀才、10匹以上だと天才、9匹未満は一般人という成績がつきます。また、平均数が15匹以上だとルアーが貰えます。

MARIEちゃんの釣りの成績に応じて、
■成績
■ルアーが貰えるかどうか
を出力するプログラムを書いてください。但しフォーマットは以下とします。
MARIEちゃんが釣った魚の平均数は●匹です。
成績は●(秀才、天才、一般人のいずれか)でした。
よってルアーは(「もらえました。」or「もらえませんでした。」)

【前提】
MARIEちゃんが釣った魚の成績は、「オブジェクトが入った配列」になっています。

const scores = [
 { fishing: 'バス', score: 30 },
 { fishing: 'ブルーギル', score: 20 },
 { fishing: '雷魚', score: 10 }

];
課題その①
scores」を引数として受け取り、平均数を返す関数「getAverage 」を作ってください。
課題その②
平均数を引数として受け取り、成績を判定して秀才、天才、一般人のいずれかの文字列を返す関数 「skill」作ってください。
課題その③
平均数を引数として受け取り、ルアーが貰えるかどうかを返す関数 「getLure」 を作ってください。この関数はルアーが貰える場合は true, 貰えない場合は false を返します。

テストの解説その1

ゆっくり順番に考えていきましょう!
用意をする関数は以下の4つです。

■結果を出したい人(※名前はMARIEちゃんとしましょう)
MARIEちゃんが持っている情報は、釣れた魚の数、
バス30匹、ブルーギル20匹、雷魚10匹のみです。

function bassFishing() {
 const scores = [
   { fishing: 'バス', score: 30 },
   { fishing: 'ブルーギル', score: 20 },
   { fishing: '雷魚', score: 10 }

];
}

■平均数を出す係(※名前は平均さんとしましょう)

function getAverage(scores) {
 

}

■成績を判定(秀才、天才、一般人)する係(※名前は判定さんとしましょう)

function skill(average) {

}

■ルアーが貰えるか判定する係(※名前はルアーさんとしましょう)

function getLure(average) {


}

つまり、MARIEちゃんは以下のように、
各係に仕事を振って、回答を貰って、次の係に仕事を振ってを繰り返すことで解決まで導く進行係となります。

MARIEちゃんから平均さんへ
「scoresを渡すから平均点を教えてよ!」
MARIEちゃんから判定さんへ
「averageを渡すからskill(成績)を教えて!」
MARIEちゃんからルアーさんへ
「averageを渡すからルアーが貰えるか判定してね♪」

テストの解説その2(MARIEちゃんの関数)

では実際に、MARIEちゃんから平均さんへ仕事を振る準備段階のプログラムを書いてみましょう。

function bassFishing() {
 const scores = [
   { fishing: 'バス', score: 30 },
   { fishing: 'ブルーギル', score: 20 },
   { fishing: '雷魚', score: 10 }

 ];

 //平均さんにscoresを渡して、平均点を返す
 const average = getAverage(scores);

}

次は、MARIEちゃんから判定さんへ仕事を振る準備段階のプログラムを追加してみましょう。

function bassFishing() {
 const scores = [
   { fishing: 'バス', score: 30 },
   { fishing: 'ブルーギル', score: 20 },
   { fishing: '雷魚', score: 10 }

 ];

 //平均さんにscoresを渡して、平均点を返す
 const average = getAverage(scores);

 //判定さんにaverageを渡して、gradeを返す
 const grade = skill(average);

}

次に、MARIEちゃんからルアーさんへ仕事を振る準備段階のプログラムを追加してみましょう。

function bassFishing() {
 const scores = [
   { fishing: 'バス', score: 30 },
   { fishing: 'ブルーギル', score: 20 },
   { fishing: '雷魚', score: 10 }

 ];

 //平均さんにscoresを渡して、平均点を返す
 const average = getAverage(scores);

 //判定さんにaverageを渡して、gradeを返す
 const grade = skill(average);

 //ルアーさんにaverageを渡して、getLureを返す
 const canbeobtained = getLure(average);

}

次に、ルアーが貰えるかどうかのif文を追加してみましょう!

function bassFishing() {
 const scores = [
   { fishing: 'バス', score: 30 },
   { fishing: 'ブルーギル', score: 20 },
   { fishing: '雷魚', score: 10 }

 ];

 //平均さんにscoresを渡して、平均点を返す
 const average = getAverage(scores);

 //判定さんにaverageを渡して、gradeを返す
 const grade = skill(average);

 //ルアーさんにaverageを渡して、getLureを返す
 const canbeobtained = getLure(average);

 let message = "";
 if (canbeobtained) {
   message = "もらえました。";
 } else {
   message = "もらえませんでした。";
 }
 }

最後に、結果を出力するプログラムを追加してみましょう!

function bassFishing() {
 const scores = [
   { fishing: 'バス', score: 30 },
   { fishing: 'ブルーギル', score: 20 },
   { fishing: '雷魚', score: 10 }

 ];

 //平均さんにscoresを渡して、平均点を返す
 const average = getAverage(scores);

 //判定さんにaverageを渡して、gradeを返す
 const grade = skill(average);

 //ルアーさんにaverageを渡して、getLureを返す
 const canbeobtained = getLure(average);

 let message = "";
 if (canbeobtained) {
   message = "もらえました。";
 } else {
   message = "もらえませんでした。";
 }
 console.log(`
 MARIEちゃんが釣った魚の平均数は ${average} です。
 成績は ${grade} でした。
 よってルアーは ${message}
 `);

}

これでMARIEちゃん枠の関数は完了です( `ー´)ノ

テストの解説その3(平均さんの関数)

//オブジェクトが入った配列をもらって、scoreの平均点を返す関数
function getAverage(scores) {
 let total = 0;
 for (const data of scores) {
   total = total + data.score;
 }

 const average = total / scores.length;
 return average;
}

このプログラムは平均さんにスコアを渡して、平均さんはスコアの平均を出しています。

for of のおさらい
for (const data of scores)
これは、scoresの中から要素を一つずつ取り出し、取り出した要素をdataという変数に入れるよってことでしたよね。

total = total + data.score;
これは、total+(scoresの中にあるscoreを1つずつ足している)という計算になります。これでtotalの中身が決まります。

const average = total / scores.length;
return average;
最後に、average(平均数)は、total÷(scoresの中の配列の数)で平均点を出し、average(平均数)をMARIEちゃんに返しますよーっていうプログラムになっています。
※「scores.length」は「3」でもいけるけど、数が多かった場合この書き方の方が間違いが無いので良いです!

テストの解説その4(判定さんの関数)

// 平均点をもらってgradeを返す関数
function skill(average) {
 let grade;
 if (20 <= average) {
   grade = '秀才';
 } else if (10 <= average) {
   grade = '天才';
 } else {
   grade = '一般人';
 }
 return grade;
}

このプログラムは判定さんに平均数を渡して、判定さんは成績を判断しています。

let grade;
まず、変数を決めています。

if (20 <= average) {
grade = '秀才';
} else if (10 <= average) {
grade = '天才';
} else {
grade = '一般人';
}

これはもし平均数が20以上だったら秀才10以上だったら天才その他の場合は一般人の成績をつけますねってこと。

return grade;
最後に、成績をMARIEちゃんに返しますよーっていうプログラムになっています。

テストの解説その5(ルアーさんの関数)

// 平均点をもらって、お小遣いアップできる(true) or できない(false)かを返す
function getLure(average) {
 if (15 <= average) {
   return true;
 } else {
   return false;
 }
}

このプログラムはもし釣った魚の平均数が15匹以上の場合は、trueをMARIEちゃんに返し、その他の場合はfalseを返すよっていうプログラムです。

テストの回答

解説を見ずとも回答できた方はまじリスペクト!
解説を見て理解した人もすごいすごい!\(^o^)/
では、全てのプログラムを組み合わせてみましょう。

function bassFishing() {
 const scores = [
   { fishing: 'バス', score: 30 },
   { fishing: 'ブルーギル', score: 20 },
   { fishing: '雷魚', score: 10 }

 ];

 const average = getAverage(scores);

 const grade = skill(average);

 const canbeobtained = getLure(average);

 let message = "";
 if (canbeobtained) {
   message = "もらえました。";
 } else {
   message = "もらえませんでした。";
 }
 console.log(`
 MARIEちゃんが釣った魚の平均数は ${average} です。
 成績は ${grade} でした。
 よってルアーは ${message}
 `);

}

function getAverage(scores) {
 let total = 0;
 for (const data of scores) {
   total = total + data.score;
 }

 const average = total / scores.length;
 return average;
}

function skill(average) {
 let grade;
 if (20 <= average) {
   grade = '秀才';
 } else if (10 <= average) {
   grade = '天才';
 } else {
   grade = '一般人';
 }
 return grade;
}

function getLure(average) {
 if (15 <= average) {
   return true;
 } else {
   return false;
 }
}

結果はこうなりました。

画像1

できたーできたーできたー\(^o^)/ (゚∀゚) (゚∀゚) (ノД`)・゜・。

はぁ。本当なんか感動・・・
って浸っている時間は私にはないのだけど、本当皆様お疲れ様です!

次はなんと基礎編の最終回となります(゚∀゚)!!
っていってもまだまだGASの勉強と記事は続きますが、基礎編は最終回です。

ぜひ、お楽しみにしていてください!
ではまた次回、よろしくお願いいたします(`・ω・´)ゞ

この記事が気に入ったらサポートをしてみませんか?