paiza レベルアップ問題集 標準入力その3「STEP: 4 半角スペース区切りの 10 個の入力」をPythonとGASで解いたコードの紹介

この記事を読むことで、PythonとGASで空白スペースを含む1行の文字列を取得して、空白スペースの所で区切って、ループを使って10個の文字列に順に出力する方法の概要を掴めます。

また、GASではスプレッドシートを用いて値を取得して出力しています。
更にPythonではループを基本的な書き方と内包表記の書き方の2通りで掲載します。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。


半角スペース区切りの 10 個の入力 (paizaランク D 相当)

問題:文字列 s_1, s_2, … s_9, s_10 が半角スペースで区切られて 1 行で与えられます。各文字列を出力するごとに改行し 10 行で出力してください。

ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

手順として、

1:標準入力で空白スペースを含む文字列を区切って取得する

2:取得した文字列がリストになっていることを確認する

3:ループを使って出力する

の3ステップで行います。

今回は下記の入出力例1を用います。

入力例1
VypymzW25l 3xsXWAK NYwbs2MRC kh4 mr38o8W9 94 fEJ 6THlW fJFTy n

出力例1
VypymzW25l
3xsXWAK
NYwbs2MRC
kh4
mr38o8W9
94
fEJ
6THlW
fJFTy
n

まず、準備として、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行になり、よりシンプルなコードになりました。
コードと実行結果です。

s=input().split(' ')
print(s)

for word in s:
    print(word)

#内包表記を使ったループで出力する
print('--- 内包表記 ---')
[print(word) for word in s]

ただ、このままでは求められる出力結果に対して冗長な部分があるので、不要な箇所はコメントアウトします。

Pythonでコメントアウトする場合、1行でしたら「#(シャープ)」ですが、複数行をコメントアウトする際には、「’(シングルクォーテーション)」を3つで「”’」か、「”(ダブルクォーテーション)」を3つで「”””」を使います。
この記事では「”’」とシングルクォーテーションを使っております。

s=input().split(' ')

'''
print(s)

for word in s:
    print(word)

#内包表記を使ったループで出力する
print('--- 内包表記 ---')
'''

[print(word) for word in s]

更に提出ように最小限のコードになるようにしたスッキリなコードはこちらになります。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

#内包表記を使ったループで出力する
[print(word) for word in s]

paiza提出用の出力結果です。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

ここも、paiza問題集の入力例をそのまま緑のセルB1に貼りつけたのみです。
(セル結合はしておりません。)

緑色のセルB1(1行,2列)の所に入力した文字列を取得して、それを黄色い所B3〜B12まで縦に10セル分に単語を出力します。

その際、この黄色く塗りつぶしたセルの所に、二次元配列として取得した文字列が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:緑色のセルのB1を取得して、空白区切り文字の所で区切って配列arrayに格納する

3:配列として格納出来たことをログ出力で確認する

4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する

5:ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する

6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

7:スプレッドシートの黄色いセルに出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

これを関数「standardInput4」に書いていきます。
Standard Inputで標準入力の意味です。

function standardInput4() {
  
  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}

手順2:緑色のセルB1を取得して、空白区切り文字の所で区切って配列arrayに格納する

const array=ss.getRange(1,2).getValue().split(‘ ‘);

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセルの所を取得して、空白区切り文字の所で区切って配列arrayに格納する
  const array=ss.getRange(1,2).getValue().split(' ');
  
}

手順3:配列arrayに格納出来たことをログ出力で確認する

console.log(array);

コードとログ出力結果です。

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  //配列として格納出来たことをログ出力で確認する
  console.log(array);

}

手順4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する

const array2 = [];

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  console.log(array);

  //スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する
  const array2=[];

}

手順5:ループを使ってpushメソッドでs2にsを2次元配列として追加する

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  console.log(array);

  const array2=[];

  //ループを使ってpushメソッドでarray2にarrayを2次元配列として追加する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
}

手順6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

console.log(array2);

コードと実行結果のログです。

function standardInput4() {

  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]]);
  }

  //スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する
  console.log(array2);

}

手順7:スプレッドシートの黄色いセルB3〜B12に10行分の単語を出力する

ss.getRange(3,2,array2.length).setValues(array2);

function standardInput4() {

  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〜B12の10行分の出力をする
  ss.getRange(3,2,array2.length).setValues(array2);

}

実行後のスプレッドシートです。

(出力結果を左揃えにしています。)


お疲れ様でした。ブレイクタイムPhotoは、

「しながわ花海道の赤いコスモス」です。

←前の問題へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力3」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介