このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
この問題では、N個の数字が与えられます。
例えば、N=5で5個の場合、
1 2 3 4 5
の数字が与えられます。
入力例3
8
8 1 3 8 1 3 8 1
出力例3
8
1
3
8
1
3
8
1
この入力例の場合は、N=8で8個の数字が与えられます。
これを改行区切りで表示します。
ではまず、Pythonで解いてみます。
<<Pythonでの解き方>>
paiza.ioで、出力例3で実行してみます。paiza.ioの使い方はこちらの記事をご覧下さい。
手順として、
1.数がN個あるので(この場合N=8)、8を標準入力読み込んでNに代入する
2.8個のスペース区切りの数を標準入力で読み込んで配列arrayに代入する
3.ループで出力する。
コードを見てみましょう。
手順1では、
N=int(input())
で、標準入力を数値として読み込みます。
手順2では、
array=list(map(int,input().rstrip().split(‘ ‘)))
で、配列としてスペース区切りの数値を標準入力で読み込みます。
rstripで改行の影響を無くします。
split(‘ ‘)でスペース区切りの数字を読み込みます。
手順3ではループで配列の各要素をnumに代入して出力しています。
Pythonでの全コードはこちらになります。
N=int(input())
array=list(map(int,input().rstrip().split(' ')))
for num in array:
print(num)
<<GASでの解き方>>
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
濃い灰色のセルの所に配列の個数8を用意します。
薄い灰色のセルの所に数字「8 1 3 8 1 3 8 1」を用意します。
これをB4からB11の黄色いセルに出力します。
※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※
手順はこのようになります。
1:からの配列arrayを定義する(後で2次元配列として黄色い所に出力)
2:スプレッドシートからアクティブシートをアクセスする
2:配列の要素数Nを定義する
4:変数cellに、数値をセルB2からI2まで読み込む
5:読み込んだ変数cellをログに出力する
6:ループで0からN未満までを回して、「array.push(cell[0][i])」で付け加えて、二次元配列にする。
(スプレッドシートの薄い灰色の所で取得した配列はcell[0][0]からcell[0][N-1]となる。それを二次元配列として追加するため、array.push([cell[0][i]])でi<Nまでループを回す。)
7:ログに表示
8:スプレッドシートに表示する。セルB4からN行分なので、getRange(4,2,N)でセルB4からN行分を確保してそこに配列を流し込むイメージ
手順1では、このように空の配列を用意して、この配列を使って、最後に黄色い範囲に出力します。
let array=[]
手順2では、アクティブなシートを用意します。
ss=SpreadsheetApp.getActiveSheet();
手順3では、配列の要素数N(この例では8個)を読み込みます。
N=ss.getRange(1,2,1).getValue();
手順4では、配列が入力されている薄い灰色の部分を読み込みます。
cell=ss.getRange(2,2,1,N).getValues();
手順5では読み込んだcell(二次元配列、1行8列)を出力します。
cell=ss.getRange(2,2,1,N).getValues();
手順6では、ループを使って出力用の空の配列arrayに追加して行っています。
for(let i=0;i<N;i++){
array.push([cell[0][i]]);
}
iが0からN未満のループを使っています。
配列は0から始まるので、ループは0からN未満になります。
空の配列arrayに、
array.push([cell[0][i]]);
で追加しています。
cellはスプレッドシートの配列が格納されている薄灰色の部分です。
これは1行目に要素が8あるので、cell[0][i]でループを回しながら追加しています。
手順7で、スプレッドシートに格納する、空だった配列arrayを出力しています。
console.log(array);
最初の行ではcellで取得した所を表示していて、次の行では、2次元配列として追加して行ったarrayを表しています。
手順8でスプレッドシートに二次元配列arrayを出力しています。
cell2=ss.getRange(4,2,N).setValues(array);
実行結果です。
GASでの全コードはこちらになります。
function loop4(){
//後で出力する様の空の配列。
//これを二次元配列として追加していく
let array=[]
//アクティブなスプレッドシートを用意する
ss=SpreadsheetApp.getActiveSheet();
//数字の数を読み込む
N=ss.getRange(1,2,1).getValue();
//N個の数字を読み込む
cell=ss.getRange(2,2,1,N).getValues();
//範囲cellを出力
console.log(cell);
//ループで出力用の配列arrayを追加していく
for(let i=0;i<N;i++){
array.push([cell[0][i]]);
}
//2次元配列になったarrayをログ表示
console.log(array);
//スプレッドシートの黄色い所に出力
cell2=ss.getRange(4,2,N).setValues(array);
}
宜しかったらコピペしてアレンジして見て下さい。
おまけですが、良くある凡ミスエラーとして、行めのsetValue’s’(array)をsetValue(array)と、setValuesのsを抜かしてしまうことです。
結果、このようなエラーになってしまいます。
お疲れ様でした。
ブレイクタイムフォトはこちらになります。
羽田空港第1ターミナル
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験