このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
問題:長さ N の数列 a (a_1, a_2, …, a_N) が与えられます。
この数列の要素を逆順に、改行区切りで出力してください。
具体例として出力例2の、N=10 リスト「1,2,3,4,5,6,7,8,9,10」を逆順に表示させる処理で考えてみます。
入力例2
10
1 2 3 4 5 6 7 8 9 10
出力例2
10
9
8
7
6
5
4
3
2
1
ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。
<<Pythonでの解き方>>
下準備として、paiza.ioにこの様に入力します。
手順として、
1.標準入力でリストの長さNを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.ループでreversedを使って逆順に設定
4.print文で出力
コードを見てみましょう。
手順1では、
N=int(input())
で、標準入力でリストの個数Nを読み込めます。
手順2では、
array=list(map(int,input().rstrip().split(‘ ‘)))
で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込んでいます。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。
手順3,4では、riversedを使って逆順から出力しています。
for num in reversed(array):
print(num)
ここまでの全てのコードです。
N=int(input())
array=list(map(int,input().rstrip().split(' ')))
for num in reversed(array):
print(num)
paiza.ioの出力結果です。
内包表記で書く場合は、ループの所が1行に略せます。
N=int(input())
array=list(map(int,input().rstrip().split(' ')))
[print(num) for num in reversed(array)]
<<GASでの解き方>>
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
緑のセルにN=配列の要素数、薄い灰色の所に配列array、濃い灰色の所に配列array2、減算結果array_ansを黄色の所に求めます。
※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※
手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:緑のセルから配列の長さNに出力する数値(この問題の場合は「10」)を取得する。
3:灰色のセルから(この問題の場合は「1,2,3,4,5,6,7,8,9,10」)を読み込み、配列arrayとしてログ出力sルウ。
4:灰色のセルを反転させてログ出力するintを確認する
5:スプレッドシートの黄色い所のB4である(4,2)から1行N列分に反転したarrayを出力する
手順1: スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2:緑のセルから配列の長さNに出力する数値(この問題の場合は「10」)を取得して、ログ出力する。
let N=ss.getRange(1,2).getValue();
console.log(N);
手順3:灰色のセルから(この問題の場合は「1,2,3,4,5,6,7,8,9,10」)を読み込み、配列arrayとしてログ出力する
let array=ss.getRange(2,2,1,N).getValues();
console.log(array);
これで、元の配列(反転する前の)を確認します。
手順4:配列arrayは二次元配列なので0行目を反転させる
array[0]=array[0].reverse();
console.log(array)
手順5:スプレッドシートの黄色いセルに反転したarrayを出力する
ss.getRange(4,1,1,N).setValues(array);
スプレッドシートの実行結果です。
GASでの全コードはこちらになります。
function loop12(){
//SpreadsheetAppから階層を辿ってアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
//配列の長さNを取得する
let N=ss.getRange(1,2).getValue();
console.log(N);
//arrayを配列として取得してログ出力する
let array=ss.getRange(2,2,1,N).getValues();
console.log(array);
//arrayを反転させてログ出力する
array[0]=array[0].reverse();
console.log(array)
//スプレッドシートの黄色いセルに反転した配列を格納する
ss.getRange(4,2,1,N).setValues(array);
}
宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした。
ブレイクタイムフォトはこちらになります。
東池袋にある、サンシャイン水族館で撮影した空飛ぶペンギン
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験