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