paiza レベルアップ問題集 「FINAL問題 FizzBuzz」をPythonとGASで解いてみた

この記事を読むと、PythonとGASでのIF文、Forループの基本的書き方を学べます。
また、3で割れる場合、5で割れる場合、3と5で割れる場合などの条件分岐の指定で使う剰余演算子も詳しく見ていきます。
FizzBuzz問題と言って、3で割れる場合はFizz、5で割れる場合はBuzz、両方で割れる場合はFizzBuzzというメジャーなプログラミング問題を扱っています。

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

FizzBuzz (paizaランク D 相当)

問題:1 ~ 100 の整数に対して、3 と 5 の両方で割り切れるなら FizzBuzz を、
3 でのみ割り切れるなら Fizz 、5 でのみ割り切れるなら Buzz を改行区切りで出力してください。
また、どちらでも割り切れない場合は、その数字を改行区切りで出力してください。

ではまず、Pythonで解いてみます。

<<Pythonでの解き方>>

基本的なループとIF文による分岐です。
手順はこの様になります。

手順1:ループで1〜100までの数字の設定
手順2:ifで3と5の両方で割り切れる場合の処理
手順3:elifで3のみ割り切れる場合の処理
手順4:elifで5のみ割り切れる場合の処理
手順5:上記以外(3でも5でも割り切れない場合)

手順1:ループで1〜100までの数字の設定

for num in range(1,101):

として、終了の所が101未満で1〜100まで出力出来ます。

手順2:ifで3と5の両方で割り切れる場合の処理

if num%3==0 and num%5==0:
        print('FizzBuzz')

手順3:elifで3のみ割り切れる場合の処理

elif num%3==0:
        print('Fizz')

手順4:elifで5のみ割り切れる場合の処理

elif num%5==0:
        print('Buzz')

手順5:上記以外(3でも5でも割り切れない場合)

else:
        print(num)

全コードと実行結果です。

for num in range(1,101):
    if num%3==0 and num%5==0:
        print('FizzBuzz')
    elif num%3==0:
        print('Fizz')
    elif num%5==0:
        print('Buzz')
    else:
        print(num)

・・・中略・・・

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。
まず、スプレッドシートの1行〜100行までをこの様に塗りつぶしました。
この範囲の1〜100までのFizz、Buzzを出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする
2:FizzBuzzの結果を格納する配列arrayを宣言する
3:ループで1〜100までの数numを発生させる
4:numが3と5の両方で割れる場合に「FizzBuzz」を配列に追加させる
5:numが3のみ割れる場合「Fizz」を配列に追加させる
6:numが5のみ割れる場合「Buzz」を配列に追加させる
7:上記のどれでも無い場合(3でも5でも割れない)はその数自体を配列に格納する
8:ログでarrayにFizzBuzzの結果を格納できたことを確認する
9:スプレッドシートの黄色いセルに配列arrayに格納されたFizzBuzzの結果を出力する

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:FizzBuzzの結果を格納する配列arrayを宣言する

let array=[];

手順3:ループで1〜100までの数numを発生させるコード

for(let num=1;num<=100;num++)

手順4から手順7までのコード
手順4:numが3と5の両方で割れる場合に「FizzBuzz」を配列に追加
手順5:numが3のみ割れる場合「Fizz」を配列に追加させる
手順6:numが5のみ割れる場合「Buzz」を配列に追加させる
手順7:上記のどれでも無い場合(3でも5でも割れない)はその数自体を配列に追加する

for num in range(1,101):
    if num%3==0 and num%5==0:
        print('FizzBuzz')
    elif num%3==0:
        print('Fizz')
    elif num%5==0:
        print('Buzz')
    else:
        print(num)

手順8:ログでarrayにFizzBuzzの結果を格納できたことを確認する

console.log(array);

・・・中略・・・

手順9:スプレッドシートの黄色いセルに配列arrayに格納されたFizzBuzzの結果を出力する

ss.getRange(1,1,100).setValues(array);

スプレッドシートの実行結果です。

・・・中略・・・

GASでの全コードはこちらになります。

function loop16() {

  //スプレッドシートからアクティブシートをアクセスする
  const ss = SpreadsheetApp.getActiveSheet();

  //FizzBuzzの判定結果を格納する出力用の配列を用意する
  let array = []

  //ループで1〜100までの数に対してFizzBuzz判定
  for (let num = 1; num <= 100; num++) {

    //numが3と5の両方で割れる場合に「FizzBuzz」を配列に追加させる
    //numが3のみ割れる場合「Fizz」を配列に追加させる
    //numが5のみ割れる場合「Buzz」を配列に追加させる
    //上記のどれれも無い場合(3でも5でも割れない)はその数自体を配列に格納する

    if (num % 3 == 0 && num % 5 == 0) {
      array.push(['FizzBuzz']);
    } else if (num % 3 == 0) {
      array.push(['Fizz']);
    } else if (num % 5 == 0) {
      array.push(['Buzz']);
    } else {
      array.push([num]);
    }
  }

  //ログでarrayに累乗の計算結果を格納できたことを確認する
  console.log(array);

  //スプレッドシートの黄色いセルに配列arrayに格納されたFizzBuzzの結果を出力する
  ss.getRange(1, 1, 100).setValues(array);

}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

OLYMPUS DIGITAL CAMERA

フランス、バカラのシャンデリア

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

←前の問題へ                     次の問題へ→