paiza レベルアップ問題集 標準入力その6「STEP: 1 改行区切りでの N 個の整数の入力」をPythonとGASの両方で解いたコードを紹介

この記事を読むことで、Pythonで標準入力を用いて数値の個数と、全ての数値をループの中で出力することが可能になります。

GASではスプレッドシートで値を取得して、二次元配列を用いてループを使わずに出力しています。

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

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

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

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

改行区切りでの N 個の整数の入力 (paizaランク D 相当)

問題:

1 行目で整数 N が与えられます。
2 行目以降で、N 個の整数 a_1, … , a_N が N 行で与えられます。
a_1, … , a_N を改行区切りで出力してください。

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


手順として、

1:標準入力で整数の個数Nを取得する

2:ループの中で標準入力を使い、N個全ての整数を出力する

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

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

入力例1
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

出力例1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

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

画像が縦長になりますので、少し縮小しました。

Vertical list of numbers 1 to 20; the number 20 is highlighted in a pink rounded-square outline with '= N' in red text to the right.

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

1から20までの整数の個数20が一番初めに入力例1にありますので、それをNに標準入力で整数として取得します。

ループの中でN回、つまり20回ループを回します。
変数tempに代入してprint文で出力しています。

#1:標準入力で整数の数Nを取得する
N=int(input())

#2:ループの中で標準入力を使い、N個全ての整数を出力する
for i in range(N):
    temp=int(input())
    print(temp)

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

Mobile coding UI with a green run button reading '実行 (Ctrl-Enter)', tabs for 出力/入力/コメント, and a vertical list of numbers 1–20.

Pythonは以上です。

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


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

paizaの入力例1をコピーして、スプレッドシートのA列にショートカットキー[Ctrl] + [Shift] + [V] を用いて貼り付けると、書式が崩れないで貼り付けられます。

Screenshot of a three-column spreadsheet (A–C). Column A shows the numbers 1–20 in gray cells, with A1 highlighted and showing 20; column B is mostly empty; column C is filled with a long column of yellow-highlighted cells.

緑色セルA1(1,1)に入力した、数値の個数である20をNに代入して、A2(2,1)から始まる灰色のセルの数値を20個分取得し、それを黄色いセルC1(1,3)から始まる20行に出力します。

その際この灰色のA2(2,1)から始まる20行のセルを二次元配列として取得してarrayに格納して、その整数が格納された配列arrayをC1(1,3)の黄色いセル20行に出力します。

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

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

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

2:緑のセルA1(1,1)にある20を数値の個数Nとして取得

3:灰色のセルA2(2,1)から始まるN(20)行1列を配列arrayに取得

4:取得したarrayをログ出力して二次元配列として格納されてることを確認する。

5:スプレッドシートのC1(1,3)から始まる黄色いセル20行分に出力する

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

const ss = SpreadsheetApp.getActiveSheet();

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

このコードを関数「standardInput1」に書いていきます。

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

function standardInput1() {

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

手順2:緑のセルA1(1,1)に入力されている数値の個数20を取得して定数Nに格納する

const N=ss.getRange(1,1).getValue();

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑のセルA1(1,1)に入力されている数値の個数20を取得して定数Nに格納
  const N=ss.getRange(1,1).getValue();

  //Nが取得出来たことを確認
  console.log(N);
 
}

手順3:A2(2,1)から始まる灰色のセルをN(=20)行1列分を配列arrayに取得

const array=ss.getRange(2,1,N).getValues();

セルA2は(2,1)で行数N=20ですので、(2,1,N)で(2,1,20)と同意です。
列数も入れると(2,1,N,1)ですが、1列の場合は省略出来ます。

配列の数値は20個と複数ですので、getValuesとsが付く複数形になります。

unction standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const N=ss.getRange(1,1).getValue();
  console.log(N);

  //灰色のセルN行1列を配列arrayに取得
  const array=ss.getRange(2,1,N).getValues();
  
}

手順4:スプレッドシート出力前に灰色のセルのA2から取得した配列arrayをログ出力する

console.log(array);

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

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const N=ss.getRange(1,1).getValue();
  console.log(N);

  const array=ss.getRange(2,1,N).getValues();

  //arrayをログ出力して灰色のセルA2から20行分が取得出来たことを確認する
  console.log(array);

}

arrayが二次元配列として取得出来たことが確認出来ました。

Vertical column showing numbers in square brackets: [1], [2], [3], ..., [20], arranged top to bottom.

手順5:スプレッドシートのC1(1,3)から始まる黄色いセル20行分に配列arrayを出力する

ss.getRange(1,3,N).setValues(array);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const N=ss.getRange(1,1).getValue();
  console.log(N);

  const array=ss.getRange(2,1,N).getValues();
  console.log(array);

  //スプレッドシートのC1(1,3)から始まる黄色いセルに配列arrayを格納する
  ss.getRange(1,3,N).setValues(array);

}

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

Spreadsheet with two vertical lists: left gray column showing 1–20 and right yellow column showing 1–20; green header cell in A contains 20.

GASは以上です。


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

Pink rose with dew droplets in a green garden bed; several pink blooms in the blurred background

雨露が輝く代々木公園のバラです。

←標準入力その5へ          次の問題へ→

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

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

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

■ 関連記事 ■

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

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

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

投稿者: nekosiestr

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