この記事を読むことで、PythonでのForループの基本的な書き方及び、内包表記によるループの書き方とGASのwhileを使ったループの書き方を学べます。
このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
問題:
長さがわからない数列 a が入力されます。
-1 が入力されるまで、受け取った数を改行区切りで出力してください。
この記事では、入力例2でリストに「10 2 5 13 5 20 1 5 6 -1」が与えられたという条件で解いて行きます。
入力例2
10 2 5 13 5 20 1 5 6 -1
出力例2
10
2
5
13
5
20
1
5
6
-1
ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。
<<Pythonでの解き方>>
下準備として、paiza.ioにこの様に入力します。
(入力例2をそのままioにコピーしただけ。)
手順として、
1:標準入力でリストを取得
2:len関数でリストの長さを取得して変数Nに格納
3:ループで長さN分ループを回して出力
では、コードを見て行きます。
#未知数個の配列を受け取る
array=list(map(int,input().rstrip().split()))
#配列の長さ
N=len(array)
#ループで取得
for i in range(N):
print(array[i])
ioの出力確認をしてコードを提出。
次は、ループの所を内包表記で書いたコードです。
#未知数個の配列を受け取る
array=list(map(int,input().rstrip().split()))
#配列の長さ
N=len(array)
#ループで取得
[print(array[i]) for i in range(N)]
<<GASでの解き方>>
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
黄色いセルの所に配列を出力します。
※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※
手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:配列の長さは最終列を取得して求める
3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する
4:ログで配列が取得できたことを確認
5:スプレッドシードに2次元配列として出力するarray2を宣言
6:whileループで配列の要素が「-1」以上ならarray2に追加する
7:スプレッドシート出力前にarray2のログ出力で確認する
8:スプレッドシートの黄色いセルにarray2を出力
手順1: スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2:配列の長さはgetLastColumnメソッドを使って最終列を取得して求める
const N=ss.getLastColumn();
手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する
const array = ss.getRange(2, 1, 1, N).getValues();
手順4:ログで配列を取得できたことを確認
console.log(array);
手順5:スプレッドシードに2次元配列として出力するarray2を宣言
let array2=[]
手順6:whileループで配列の要素が「-1」以上ならarray2に追加する
※無限ループにならないよう、i=0で初期化した上に、i++でインクリメントしています※
問題文の条件に
すべてのテストケースにおいて、以下の条件をみたします。
・ 0 ≦ a_i ≦ 100 (1 ≦ i ≦ N)
とありますので、whileでi>=-1の時にループを繰り返す処理を施しました。
スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が-1以上かどうか確認しています。
//whileループで配列の要素が「-1」以上ならarray2に追加する
let i=0
while(array[0][i]>=-1){
array2.push([array[0][i]]);
i++;
}
手順7:スプレッドシート出力前にarray2のログ出力で確認する
console.log(array2);
手順8:スプレッドシートの黄色いセルにarray2を出力
ss.getRange(5,1,N).setValues(array2);
GASでの全コードはこちらになります。
function loop2no1() {
const ss = SpreadsheetApp.getActiveSheet();
//配列の長さは最終列を取得して求める
const N = ss.getLastColumn();
//配列arrayを宣言して、灰色のセルの範囲の配列を格納する
const array = ss.getRange(2, 1, 1, N).getValues();
//ログで配列が取得できたことを確認
console.log(array);
//スプレッドシードに2次元配列として出力するarray2を宣言
let array2 = []
//whileループで配列の要素が「-1」以上ならarray2に追加する
let i = 0
while (array[0][i] >= -1) {
array2.push([array[0][i]]);
i++;
}
//スプレッドシート出力前にarray2のログ出力で確認する
console.log(array2);
//スプレッドシートの黄色いセルにarray2を出力
ss.getRange(5, 1, N).setValues(array2);
}
宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。
お台場のガンダム
燃え上がっています。
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験