paiza レベルアップ問題集 「STEP: 4 割り切れる数だけ出力」をPythonとGASで解いてみた

この記事を読むことで、「3で割り切れる数のみを出力する処理」を、PythonとGASの両方のコードでForループとIF文を使って習得することが可能です。

Pythonでは、基本的なループとIF分岐のコードの他にそれらを1行で書き表せる、
【内包表記】のコードも追記しております。

最初にPython、次にGASのコードを掲載します。

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

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

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

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

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

割り切れる数だけ出力 (paizaランク D 相当)

問題:
N個の整数 a_1, a_2, …, a_N が与えられます。
このN個の整数のうち、a_1 から順に「3で割り切れるか」判定し、割り切れる場合のみ改行区切りで出力してください。また、N個の整数には3で割り切れる数が少なくとも 1 つ含まれています。

この記事では入力例1の場合、N=6で6個の数値のリストに「1 2 3 4 5 6」が与えられたという条件で解いて行きます。

入力例1
6
1 2 3 4 5 6

出力例1
3
6

ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけ。)

手順として、
1:標準入力でリストの個数を取得
2:標準入力でリストを取得
2:ForループとIFで剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して出力

まずは、基本的なForとIFを用いたコードです。

#リストの数値の個数を取得
N=int(input())

#リストを取得
array=list(map(int,input().rstrip().split(' ')))

#For文とIF文でリストの数値が3で割り切れる場合のみ出力する
for num in array:
    if num%3==0:
        print(num)

次に、上記のForとIFの箇所に【内包表記】を施したコードです。

#リストの数値の個数を取得
N=int(input())

#リストを取得
array=list(map(int,input().rstrip().split(' ')))

#【内包表記】For文とIF文でリストの数値が3で割り切れる場合のみ出力する
[print(num) for num in array if num%3==0]        

ioの出力結果です。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

黄色いセルの所に「3で割り切れる数」を出力します。

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

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

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

2:スプレッドシートの緑色のセルから配列の個数を取得する

3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

4:ログで配列が取得できたことを確認

5:スプレッドシードに2次元配列として出力するarray2を宣言

6:ForループとIF文で剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して配列array2に追加。

7:スプレッドシート出力前に「3で割り切れる数」が格納された二次元配列array2のログ出力で確認する

8:スプレッドシートの黄色いセルに「3で割り切れる数」が格納された二次元配列array2を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:スプレッドシートの緑色のセルから配列の個数を取得する

const N=ss.getRange(1,2).getValue();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array=ss.getRange(4,1,1,N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:スプレッドシードに2次元配列として出力するarray2を宣言

let array2=[]

手順6:ForループとIF文で剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して配列array2に追加。
スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が奇数かどうか確認しています。

//ForループとIF文で剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して配列array2に追加。
  for (let i = 0; i < N; i++) {
    if (array[0][i] % 3 == 0) {
      array2.push([array[0][i]]);
    }
  }

手順7:スプレッドシート出力前に「3で割り切れる数」が格納された二次元配列array2のログ出力で確認する

console.log(array2);

手順8:スプレッドシートの黄色いセルに「3で割り切れる数」が格納された二次元配列array2を出力する

ss.getRange(7,1,array2.length).setValues(array2);

(7,1,array2.length)は、スプレッドシートのセルA7からarray2の長さ分のセル範囲を確保して、「3で割り切れる数」が格納された配列のarray2を出力するように設定しています。

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

function loop2no4() {

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

  //スプレッドシートの緑色のセルから配列の個数を取得する
  const N = ss.getRange(1, 2).getValue();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(4, 1, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);

  //スプレッドシードに2次元配列として出力するarray2を宣言
  let array2 = [];


  //ForループとIF文で剰余演算子「%」を使って「%3==0」を「3で割り切れる数」と判定して配列array2に追加。
  for (let i = 0; i < N; i++) {
    if (array[0][i] % 3 == 0) {
      array2.push([array[0][i]]);
    }
  }

  //スプレッドシート出力前に「3で割り切れる数」が格納された二次元配列array2のログ出力で確認する
  console.log(array2);


  //スプレッドシートの黄色いセルに「3で割り切れる数」が格納された二次元配列array2を出力する
  ss.getRange(7, 1, array2.length).setValues(array2);

}

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

バカラのシャンデリア(ピンク)

■ 参考文献の紹介■

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

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

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

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

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

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

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。