この記事を読むことで、「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 num in array:
if num% 3 == 0 :
print ( num)
次に、上記のForとIFの箇所に【内包表記】を施したコードです。
N= int ( input ( ) )
array= list ( map ( int , input ( ) . rstrip( ) . split( ' ' ) ) )
[ 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 ( 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 ( ) ;
const array = ss. getRange ( 4 , 1 , 1 , N ) . getValues ( ) ;
console. log ( array) ;
let array2 = [ ] ;
for ( let i = 0 ; i < N ; i++ ) {
if ( array[ 0 ] [ i] % 3 == 0 ) {
array2. push ( [ array[ 0 ] [ i] ] ) ;
}
}
console. log ( array2) ;
ss. getRange ( 7 , 1 , array2. length) . setValues ( array2) ;
}
宜しかったらコピペしてアレンジして見て下さい。 お疲れ様でした、ブレイクタイムフォトはこちらになります。
バカラのシャンデリア(ピンク)
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。 まずはpaizaラーニング などの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。 スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
サイトマップはこちらから
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る メインメニューに戻る Python自作サンプル GASサンプル 基本情報技術者試験
←前の問題へ 次の問題へ→