この記事を読むことで、Pythonで標準入力とsplitメソッドを用いて、文字列の数と全ての文字列をループの中で出力することが可能になります。GASではスプレッドシートで値を取得して、二次元配列にして出力しています。
このコーナーでは、学習コンテンツpaizaラーニング のレベルアップ問題集 をPythonとGASの両方で解いて全コードの解説をしています。 PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。 GASはスプレッドシートを使っています。 GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
サイトマップはこちらから
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る メインメニューに戻る Python自作サンプル GASサンプル 基本情報技術者試験
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
2 行目で与えられる N 個の文字列の入力 (paizaランク D 相当)
問題: 1 行目に整数 N が与えられます。 2 行目に、N 個の文字列 s_1, … , s_N が半角スペース区切りで与えられます。 s_1, … , s_N を改行区切りで出力してください。
ではまず、Pythonで解いてみます。
今回は、paiza.io を使って解きます。paiza.ioの使い方はこちら から。
■ Pythonでの解き方 ■
手順として、
1:1行目の文字列の個数Nを標準入力で整数として取得する 2:2行目の半角スペース区切りの文字列をリストarrayに格納する 3:リストをループで出力
の3ステップで行います。
今回は入出力例1を用います。
入力例1 5 paiza 813 paiza813 hello813 good
出力例1 paiza 813 paiza813 hello813 good
まず、準備として、paiza.ioにこのように入力します。 (入力例1 をコピペしたのみ)
下記のコードで入力と出力を行います。
#1行目の文字列の個数Nを標準入力で整数として取得する
N=int(input())
#2行目の半角スペース区切りの文字列をリストarrayに格納する
array=list(map(str,input().split(' ')))
#リストをループで出力
for i in range(N):
print(array[i])
このコードの実行(出力)結果です。
Pythonは以上です。
次は、GASで解いて行きます。
■ GASでの解き方 ■
今度は、同じ問題をGASで解いてみます。 まず、スプレッドシートにこの様に配置しました。
緑色のセルに文字列の個数N=5、灰色の所に出力するN個の文字列を入力しています。この灰色の所を配列arrayで取得し、N個の文字列を黄色いセルに出力します。その際、この黄色いセルの所には、二次元配列として取得した整数が格納された配列を出力します。
※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※
手順はこのようになります。
1:SpreadSheetAppから階層を辿って現在のシートにアクセスする 2:緑色のセルと灰色のセルを配列areaに取得する 3:文字列の数NをN=area[0][0]として取得する 4:灰色のセルの文字列の部分をarray=area[1][0].split(‘ ‘)として取得する 5:配列arrayをログ出力 6:スプレッドシートに格納する準備として、配列array2にループを使ってarrayを二次元配列array2に格納する 7:配列array2をログ出力 8:スプレッドシートの黄色い所に格納する
手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする
const ss = SpreadsheetApp.getActiveSheet();
ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2:緑色のセルと灰色のセルを配列areaに取得する
const area=ss.getRange(1,1,2).getValues();
手順3:文字列の数NをN=area[0][0]として取得する
const N=area[0][0];
手順4:灰色のセルの文字列の部分をarray=area[1][0].split(‘ ‘)として取得する
const array=area[1][0].split(‘ ‘);
手順5:配列arrayをログ出力
console.log(array);
手順6:スプレッドシートに格納する準備として、配列array2にループを使ってarrayを二次元配列array2に格納する
//スプレッドシートに格納する準備として、配列array2にループを使ってarrayを二次元配列array2に格納する
let array2=[];
for(let i=0;i<N;i++){
array2.push([array[i]]);
}
手順7:配列array2をログ出力
console.log(array2);
この画像より、二次元配列になっていることが確認できます。
手順8:スプレッドシートの黄色い所に格納する
ss.getRange(1,3,N).setValues(array2);
実行後のスプレッドシートです。
GASでの全コードはこちらになります。
function standardInput30(){
//SpreadSheetAppから階層を辿って現在のシートにアクセスする
const ss=SpreadsheetApp.getActiveSheet();
//緑色のセルと灰色のセルを配列areaに取得する
const area=ss.getRange(1,1,2).getValues();
//文字列の数NをN=area[0][0]として取得する
const N=area[0][0];
//灰色のセルの文字列の部分をarray=area[1][0].split(' ')として取得する
const array=area[1][0].split(' ');
//配列arrayをログ出力
console.log(array);
//スプレッドシートに格納する準備として、配列array2にループを使ってarrayを二次元配列array2に格納する
let array2=[];
for(let i=0;i<N;i++){
array2.push([array[i]]);
}
//配列array2をログ出力
console.log(array2);
//スプレッドシートの黄色い所に格納する
ss.getRange(1,3,N).setValues(array2);
}
宜しかったらコピペしてアレンジして見て下さい。 お疲れ様でした、ブレイクタイムフォトはこちらになります。
代々木公園の紫陽花
プログラミングのアンケートにご協力頂ける方はこちらのフォーム で勉強法など色々と教えて下さい。
←前の問題へ 次の問題へ→