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

この記事を読むことで、PythonとGASで空白スペースを含む1行の文字列を取得して、空白スペースの所で区切って、2つの文字列に出力する方法が学べます。

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

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

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

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)


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

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

まず、リストについてですが、他の言語で「配列」という呼び名ですが、 Pythonでは「リスト」と呼びます。

手順として、

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

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

3:ループを使って出力

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

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

入力例1
hello paiza

出力例1
hello
paiza

まず、準備として、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では複数行をコメントアウトする場合、「’」を3つで「”’」とするか、「”」を3つで「”””」にするかのどちらかを使います。
この記事ではシンプルに前者を使います。

s=input().split(' ')

'''
print(s)

for word in s:
    print(word)

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

[print(word) for word in s]  

paizaに提出可能な実行結果です。

更にpaizaに提出用に最小限のスッキリなコードは、こちらになります。

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

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


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

緑色のセルB1の所に入力した文字列を取得して、それをB4とB5の2行の黄色い所に出力します。

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

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

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

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

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


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


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

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

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

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

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

const ss = SpreadsheetApp.getActiveSheet();

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

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

function standardInput2() {

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

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

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

function standardInput2() {

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

}

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

console.log(array);

実行結果とログです。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  //配列arrayの出力確認
  console.log(array);

}

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

const array2 = [];

function standardInput2() {

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

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

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

function standardInput2() {

  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 standardInput2() {

  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:スプレッドシートの黄色いセルB4,B5に出力する

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

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

function standardInput2() {

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

  //スプレッドシートの黄色いセルB4,B5に二次元配列arrayを出力する
  ss.getRange(4,2,array2.length).setValues(array2);

}


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

池袋東口方面にある、サンシャイン水族館です。

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

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

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

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

■ 関連記事 ■

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

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

投稿者アバター
nekosiestr
いつもブログをご覧頂きまして、誠に有難うございます。 Excelやデータベース、プログラミングを学習する傍ら、趣味で写真を撮影してPhotoshopで編集しております。

投稿者: nekosiestr

いつもブログをご覧頂きまして、誠に有難うございます。