この記事を読むことで、PythonとGASで空白スペースを含む1行の文字列を取得して、空白スペースの所で区切って、ループを使って1000行の文字列に出力する方法が学べます。
また、GASではスプレッドシートを用いて値を取得して出力しています。
更にPythonではループを基本的な書き方と内包表記の書き方の2通りで掲載します。
このコーナーでは、プログラミング学習コンテンツのpaizaラーニングのレベルアップ問題集の同じ問題をPythonとGAS(Google Apps Script)で解いたコードを掲載しております。
Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。
(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)
【半角スペース区切りの入力】半角スペース区切りの 1,000 個の入力 (paizaランク D 相当)
問題:文字列 s_1, s_2, … s_999, s_1000 が半角スペースで区切られて 1 行で与えられます。各文字列を出力するごとに改行し 1,000 行で出力してください。
ではまず、Pythonで解いてみます。
■ Pythonでの解き方 ■
手順として、
1:標準入力で空白スペースを含む文字列を区切って取得する
2:取得した文字列がリストになっていることを確認する
3:ループを使って出力する
の3ステップで行います。
今回は下記の入出力例1を用います。
(1000行は長すぎるので、このブログで入出力例を全て表示することは省かせて頂きます。)
入力例の前半と後半の一部を掲載致します。
<前半>

<後半>

まず、準備として、paiza.ioにこのように入力します。
(入力例1をコピペしたのみ)

手順1で標準入力で空白文字を区切って取得します。
#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')手順2では先ほどの手順で取得した文字列を出力して、リストとして空白区切りで出力されていることを確認します。
s=input().split(' ')
#取得した文字列がリストになっていることを確認する
print(s)出力結果です。

手順3ではループを使って出力します。
s=input().split(' ')
#print(s) ←この行をコメントアウトする
#ループを使って出力する
for word in s:
print(word)
これを内包表記を使って書いた場合のコードです。先ほどのコードと見比べると、1行になりよりシンプルなコードが書けました。
Pythonでコメントアウトする場合、1行でしたら「#(シャープ)」ですが、複数行をコメントアウトする際には、「’(シングルクォーテーション)」を3つで「”’」か、「”(ダブルクォーテーション)」を3つで「”””」を使います。
この記事では「”’」とシングルクォーテーションを使っております。
s=input().split(' ')
#print(s)
'''
通常のループ
for word in s:
print(word)
'''
#内包表記のループ
[print(word) for word in s]
実行結果は長いので、前半と後半に分けて掲載致します。
まずは前半です。

後半です。

ここまでのコードから、コメントアウトの部分を削除したシンプルなコードです。
#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')
#内包表記のループ
[print(word) for word in s]■ GASでの解き方 ■
今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

B1(1,2)から始まる緑色の所に入力した文字列を取得して、それをB3(3,2)から始まる黄色い所に出力します。
その際B3から始まるこの黄色く塗りつぶしたセルの所に、二次元配列として取得した文字列が格納された配列を出力します。
※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※
手順はこのようになります。
1:SpreadSheetAppから階層を辿って現在のシートにアクセスする
2:緑色のセルB1を取得して、空白区切り文字の所で区切って配列arrayに格納する
3:配列arrayとして格納出来たことをログ出力で確認する
4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する
5:ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する
6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する
7:スプレッドシートのB3から始まる黄色いセルに出力する
それでは各手順を具体的に見ていきます。
手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする
GASでは、「standardInput5」と言う関数にコードを書いていきます。
Standard Inputで標準入力の意味です。
const ss = SpreadsheetApp.getActiveSheet();
ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
}手順2:緑色のセルB1(1,2)を取得して、空白区切り文字の所で区切って配列arrayに格納する
const array=ss.getRange(1,2).getValue().split(‘ ‘);
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
//B1(1,2)から始まる緑色のセルを配列arrayに取得する
const array=ss.getRange(1,2).getValues().split(' ');
}手順3:配列arrayに格納出来たことをログ出力で確認する
console.log(array);
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
const array=ss.getRange(1,2).getValue().split(' ');
//配列arrayのログ出力
console.log(array);
}
手順4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する
let array2 = [];
手順5:ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
const array=ss.getRange(1,2).getValue().split(' ');
console.log(array);
//二次元配列を宣言
const array2=[];
//ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する
for(let i=0;i<array.length;i++){
array2.push([array[i]]);
}
}手順6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する
console.log(array2);
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
const array=ss.getRange(1,2).getValue().split(' ');
//console.log(array); ←ここ、コメントアウトする
const array2=[];
for(let i=0;i<array.length;i++){
array2.push([array[i]]);
}
//スプレッドシートに出力する前に二次元配列として格納されていることをログ出力で確認する
console.log(array2);
}
手順7:スプレッドシートの黄色いセルB3(3,2)に出力する
ss.getRange(3,2,s2.length).setValues(array2);
コードと実行結果です。
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
const array=ss.getRange(1,2).getValue().split(' ');
//console.log(array); ←ここ、コメントアウトする
const array2=[];
for(let i=0;i<array.length;i++){
array2.push([array[i]]);
}
console.log(array2);
//スプレッドシートの黄色いセルB3から二次元配列の長さ分を出力する
ss.getRange(3,2,array2.length).setValues(array2);
}実行後のスプレッドシートですが、長いので前半と後半に分けて掲載致します。
まずは前半です。

後半です。

(入力データのある1行目は、行固定をしています。行番号を選択して、表示メニューの表示→固定から行1までを選んでいます。)
お疲れ様でした。ブレイクタイムPhotoは、

クリスマスシーズンに訪れた「恵比寿ガーデンプレイス」の、フランスのクリスタルメーカー「バカラ」のシャンデリアのクールなブルーです。
ご精読有難うございました。
■ GASの入門書の紹介です ■
詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)
■ 関連記事 ■
paizaレベルアップ問題集「標準入力3」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ
写真クリエイターとしての活動
自己紹介
