このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
問題:整数N,Kが与えられます。
NをK回、改行区切りで出力して下さい。
具体例として入力例3の、N=39,K=70で考えてみたい所ですが、70回も出力するのは大変なので、(私がブログで記録するには、という個人的な事情でごめんなさいm(_ _)m)、K=7で考えてみます。
この場合、「39」を7回出力します。
入力例3
39 7
出力例3
39
39
39
39
39
39
39
ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。
<<Pythonでの解き方>>
下準備として、paiza.ioにこの様に入力します。
今回はN=39,K=7なので、paiza.ioの左下の入力の所を下記のように記述します。
手順として、
1.標準入力でN,Kを読み込み、それぞれにN=39,K=7を代入する
2.ループでK回(7回)繰り返すように設定する
3.N(この例では39)を出力する
コードを見てみましょう。
手順1では、
N,K=map(int,input().rstrip().split(‘ ‘))
で、input()で標準入力を使ってintで整数として取り込んでいます。
mapを使うことで1行の複数の値を取り込めます。
rstrip()では、改行の影響を無効にしています。
split(‘ ‘)で空白区切りの文字を取り込んでいます。
手順2では、
for i in range(K):
で、ループを使って、0,1,2,…K-1まで、ループ内のprint文の処理を施しています。
この問題の場合K=7なので、0,1,2,3,4,5,6までの7回ループを回します。
print(N)
で、N(この場合39)を出力しています。
手順1,2と合わせて、39を7回出力出来ました。
Pythonでの全コードはこちらになります。
N,K=map(int,input().rstrip().split(' '))
for i in range(K):
print(N)
内包表記を使ってみます。
N,K=map(int,input().rstrip().split(' '))
[print(N) for i in range(K)]
コードを1行減らすことが出来ました。
<<GASでの解き方>>
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
なんか、鮭と卵みたいで美味しそうですね(=^x^=)
黄色い部分のA4からA10までに「39」を7回出力します。
※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※
手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
3:Nに出力する数値(この問題の場合は「39」)を取得する。
4:Kに数値を出力する回数(この問題の場合は「7」)を取得する。
5:ループでK回(この場合はK=7)配列array[]の中に[N](この場合は39)を格納する
6:arrayに二次元配列として39を7回格納出来たことをログ出力で確認する
7:スプレッドシートに表示する。セルA1から8行分なので、getRange(1,1,K)でセルA4からK行分を確保してそこに配列を流し込むイメージ
手順1: スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
let array=[];
手順3:スプレッドシートのピンクのセルから表示する数値(この場合39)を取得する。
let N=ss.getRange(1,2).getValue();
手順4:スプレッドシートの灰色のセルから表示する回数(この場合7)を取得する。
let K=ss.getRange(2,2).getValue();
手順5:ループをK回(7回)回して、push([N])を追加して二次元配列として扱えるようにする。
array.push([N]);
ループ全体ではこのようになります。
for(let i=1;i<=K;i++){
array.push([N])
}
手順6:arrayに二次元配列として39を7回格納出来たことをログ出力で確認する
console.log(array);
実行結果です。
手順7:スプレッドシートに表示する。セルA4からK行分なので、getRange(4,1,1)でセルA4からK行分を確保してそこに配列を流し込むイメージ
ss.getRange(4,1,K).setValues(array);
スプレッドシートオブジェクトにgetRangeでセルA1からK行確保し、setValues(array)で出力しています。
スプレッドシートの実行結果です。
GASでの全コードはこちらになります。
<全コード>
function loop6(){
//スプレッドシートのアクティブシートにアクセスする
const ss=SpreadsheetApp.getActiveSheet();
//シートの黄色い部分に出力用の二次元配列を用意する
let array=[];
//表示する数値Nをピンクのセルから取得する
let N=ss.getRange(1,2).getValue();
//表示回数K回を灰色のセルから取得する
let K=ss.getRange(2,2).getValue();
//ループでK回、arrayに二次元配列としてarray.push([N])で格納する
for(let i=1;i<=K;i++){
array.push([N])
}
//arrayに二次元配列として取得出来たことをログ表示で確認する。
console.log(array);
//出力用の配列arrayを黄色いセルに出力する。
ss.getRange(4,1,K).setValues(array);
}
宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした。
ブレイクタイムフォトはこちらになります。
横浜ランドマークタワーの夕暮れ
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験