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

この記事を読むことで、Pythonで標準入力でsplitメソッドを使って、半角スペース区切りの整数を2つ取得し、2行の整数を出力する方法が学べます。

GASではスプレッドシートで値を取得して出力しています。

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

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

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

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


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

問題:
整数 a, b が半角スペース区切りで与えられるので、改行区切りにして 2 行で出力してください。

ではまず、Pythonで解いてみます。


手順として、

1:標準入力でsplitメソッドを使って半角スペース区切りの整数を取得する

2:取得した整数a,bを出力する

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

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

入力例2
1234 5678

出力例2
1234
5678

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

Green rounded Run button with white arrow and text '実行 (Ctrl-Enter)', a gray tab labeled '入力', and a text field displaying '1234 5678'.

下記のコードで標準入力とprint文での出力を行います。

map… 一括変換
int … 整数を標準入力で取得する際に用いる
input … 標準入力で取得
split … 指定した文字で区切る

これを1行で書いて、aとbにそれぞれ代入しています。

#標準入力で取得した値を数値と区切りに一括で変換してaとbそれぞれに代入
a,b=map(int,input().split(' '))

#代入した数値それぞれを出力
print(a)
print(b)

このコードの実行(出力)結果です。

Green rounded Run button with left-arrow icon and label 実行 (Ctrl-Enter); a tab bar below shows 出力, 入力, コメント with a blue 0 badge; numbers 1234 and 5678 appear underneath.

Pythonは以上です。

次は、GASで解いて行きます。


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

Spreadsheet snippet with columns A and B: A1 shows the Chinese word 输入 (Input) and B1 contains 1234 5678 with a light green background; A3 shows 输出 (Output) with a yellow-highlighted area in B3–B4.

paizaの問題から例2をコピーして、スプレッドシートの緑のセルB1(1,2)に貼り付ける際、[Ctrl] + [Shift] + [V] のショートカットを使うと書式が崩れないでコピペ出来ます。

それでは、緑色のセルに入力した整数を取得して、それを黄色いセルに出力します。

その際、この黄色いセルB3(3,2)〜B4(4,2)の所には、二次元配列として取得した整数が格納された配列を出力します。

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

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

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

2:緑のセルB1(1,2)の整数をsplitメソッドを使って配列arrayに格納する

3:配列arrayのログ出力

4:スプレッドシートに出力する為に、二次元配列としてarray2(空の配列)を使用するので、その宣言をする

5:ループを使って一次元配列arrayを二次元配列array2に追加する

6:スプレッドシート出力前に、array2が二次元配列になっていることをログで確認する

7:スプレッドシートの黄色いセルB3(3,2)〜B4(4,2)に格納する

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

const ss = SpreadsheetApp.getActiveSheet();

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

コードを関数「standardInput2」に書いて行きます。

Standard Inputで標準入力の意味です。

function standardInput2() {

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

手順2:緑のセルB1(1,2)の整数をsplitメソッドを使って配列arrayに格納する

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

function standardInput2() {
  
  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセルB1(1,2)の整数をsplitメソッドを使って配列arrayに格納する
  const array=ss.getRange(1,2).getValue().split(' ');
  
}

手順3:配列arrayのログ出力

console.log(array);

コードと出力結果です。
結果の画像から1次元配列であることが確認出来ます。

function standardInput2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');

  //配列arrayのログ出力
  console.log(array);
  
}
UI panel with a pale yellow banner reading 実行開始 and a code list ['1234', '5678'].

手順4:スプレッドシートに出力する為に、二次元配列としてarray2(空の配列)を使用するので、その宣言をする

const array2=[];

function standardInput2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');

  console.log(array);

  //スプレッドシートに出力する為に、数値をarray2に二次元配列として格納する
  //空の二次元配列array2を宣言する
  const array2=[];

}

手順5:ループを使って一次元配列arrayを二次元配列array2に追加する

for(i=0; i<array.length; i++)

一次元配列arrayの添字0から、この配列の長さが2(array.lengthは2になります)
の1つ前までをループを使って二次元配列に追加して行きます。
i<arrayであり、「<」となっていて「<=」では無い所がポイントです。

array.lengthの長さ未満(配列の長さから1を引く)を指定することによって、ループ内ではiが添字0と添字1が該当します
array[i]がarray[0] 〜 array[1]の2つまでループ内で扱います。

array2.push(array[i]);

配列の添字は0から始まるので、array[0]である「1234」とarray[1]である「5678」をループで追加します。

[array[i]]と、array[i]自体を[ ]で括っていることで、二次元配列として追加しています。

また、iの前でletを用いていることにより、iは定数ではなく変数として、ループの中で値を0,1と変えられます。

function standardInput2() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');

  console.log(array);

  //スプレッドシートに出力する為に、数値をarray2に二次元配列として格納する
  
  const array2=[];

  //ループでarrayに格納された数値を二次元配列に追加する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  } 
}

手順6:スプレッドシート出力前に、array2が二次元配列になっていることをログ出力で確認する

console.log(array2);

コードと実行結果です。
これで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);

}
Two one-item arrays [ '1234' ] and [ '5678' ] shown, with a pale banner reading 実行完了 (Execution completed).

手順7:スプレッドシートの黄色いセルB3〜B4の(3,2)から2行分出力する

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

セルB3(3,2)から2行分なので(3,2,2)となります。
1列分も含めると(3,2,2,1)になりますが、この1列分は省略可能です。

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

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

  //スプレッドシートの黄色いセルB3〜B4にB3(3,2)から2行分出力する
  ss.getRange(3,2,2).setValues(array2);

}

Spreadsheet showing input and output labels in Japanese: '入力' (input) and '出力' (output); green cell displays '1234 5678' and yellow cells display '1234' and '5678' respectively.

GASは以上です。


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

Tokyo Skytree lit purple at night, framed by pink cherry blossoms in the foreground.

スカイツリーと河津桜(夜桜でライティングは紫の雅(みやび))です。

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

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

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

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

■ 関連記事 ■

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

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

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

投稿者: nekosiestr

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