【paiza レベルアップ問題集】標準入力その1 「FINAL問題 【行入力】1,000 行の入力」をPythonとGASで解いたコード紹介

この記事を読むことで、ループを使って1000行分もの文字列をPythonの標準入力で取得・出力する方法と、GASではスプレッドシートを用いて1000行の配列をループで作成して、それを別の列に出力する方法を掲載しております。

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

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

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


【行入力】1,000 行の入力 (paizaランク D 相当)

問題:
s_1, s_2, s_3, … s_999, s_1000 の 1,000 個の文字列が与えられます。
文字列を与えられた順番通りに出力してください。

この記事では、下記の入力例1の場合を例にして、文字列の出力を行います。

入力例1
paiza0
paiza1
paiza2
paiza3
paiza4
paiza5
paiza6
paiza7
paiza8
paiza9



(以下略)



paiza990
paiza991
paiza992
paiza993
paiza994
paiza995
paiza996
paiza997
paiza998
paiza999

出力例1

paiza0
paiza1
paiza2
paiza3
paiza4
paiza5
paiza6
paiza7
paiza8
paiza9



(以下略)



paiza990
paiza991
paiza992
paiza993
paiza994
paiza995
paiza996
paiza997
paiza998
paiza999

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


下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしたのみで、画像はその一部です。)

(以下略・・・)

手順として、

1:問題文から1000行と分かっているので、ループを1000回まわし、ループの中で標準入力で取得した文字列を変数tempに格納して出力する

で、行います。

Pythonのコードはこちらになります。
また、コメントが複数行に渡る場合は「’」のシングルクォーテーション3つ「”’」か「”」のダブルクォーテーション3つの「”””」でコメントの開始位置と終了位置に掲載します。

'''
問題文から1000行と分かっているのでループを1000回まわし、
ループの中で標準入力で取得した文字列を変数tempに格納して出力する
'''

for i in range(1000):
    temp=input()
    print(temp)

この手順で作成したプログラムを実行した出力結果の一部です。

(以下略・・・)


次は、同じ問題をGASで解いてみます。
まず、この様なスプレッドシートを用意しました。

今回はA列の入力欄にpaiza0,paiza1,paiza2・・・paiza997,paiza998,paiza999と1000行ものデータを用意しなければなりません。さすがに手打ちではきついので、まず最初にこのようなコードを作成致しました。

文字列作成準備の手順です。

1:SpreadSheetAppからアクティブシートにアクセスする

2:A列にpaiza0からpaiza999まで出力するのに事前に文字列を格納する配列columnAを宣言

3:ループを使って配列columnAにpaiza0からpaiza999までの値を追加していく

4:スプレッドシートのA列に格納する前にログで確認する

5:スプレッドシートのA列の入力の下に配列columnAの値を格納する

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

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

const ss = SpreadsheetApp.getActiveSheet();

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

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

function loop1000() {

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

}

手順2:A列にpaiza0からpaiza999まで出力するのに事前に文字列を格納する配列columnAを宣言

let columnA=[];

function loop1000() {

  const ss=SpreadsheetApp.getActiveSheet();

  //A列にpaiza0からpaiza999まで出力するのに事前に文字列を格納する配列columnAを宣言
  let columnA=[];

}

手順3:ループを使って配列columnAにpaiza0からpaiza999までの値を追加していく

ループ内の変数iを0から999まで変化させて、文字列「paiza」に「+i」でくっつけて、paiza0〜paiza999をループを利用して生成しています。

また、スプレッドシートは二次元配列の為、「 [‘paiza’ + i ] 」としています。

function loop1000() {

  const ss=SpreadsheetApp.getActiveSheet();
  let columnA=[];

  //ループを使って配列columnAにpaiza0からpaiza999までの値を追加していく
  for(let i=0;i<1000;i++){
    columnA.push(['paiza'+i]);
  }

}

手順4:スプレッドシートのA列に格納する前にログで確認する

console.log(columnA);

function loop1000() {

  const ss=SpreadsheetApp.getActiveSheet();
  let columnA=[];

  for(let i=0;i<1000;i++){
    columnA.push(['paiza'+i]);
  }

  //A列に出力前にログで二次元配列が生成できたことを確認
  console.log(columnA);

}

実行した所、ログでは1000行は多過ぎて全ては表示しきれませんでしたが、二次元配列の形になっていることは確認出来ました。

(・・・ 途中省略 ・・・)

手順5:スプレッドシートのA列の入力の下に配列columnAの値を格納する

ss.getRange(2,1,columnA.length).setValues(columnA);

paiza0〜paiza999まで出力するセルはA2を起点としているので、2行目1列で(2,1)としています。

その後にこの配列の長さである、columnA.lengthで1000行分を確保しています。

function loop1000() {

  const ss=SpreadsheetApp.getActiveSheet();
  let columnA=[];

  for(let i=0;i<1000;i++){
    columnA.push(['paiza'+i]);
  }

  console.log(columnA);

  //スプレッドシートのA列の入力の下に配列columnAの値を格納する
  ss.getRange(2,1,columnA.length).setValues(columnA);

}

このコードの実行結果です。

(・・・ 途中省略 ・・・)

スプレッドシートはpaiza0からpaiza999までの1000行表示出来ました。
最初の行が見えるように行固定致しました。


準備が整ったところで、A列の文字入力部分を二次元配列として取得して、C列の黄色いセルにそのまままの順番で文字列を出力します。プログラミングの手順は下記のようになります。

6:SpreadSheetAppからアクティブシートにアクセスする

7:A列の値を定数numに格納する

8:numをC列に出力する

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

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

function standardInput5() {

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

}

手順7:A列の値を定数numに格納する

const num=ss.getRange(2,1,1000).getValues();

function standardInput5() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  //A列の値を定数numに格納する
  const num=ss.getRange(2,1,1000).getValues();

}

手順8:numをC列に出力する

ss.getRange(2,3,1000).setValues(num);

function standardInput5() {

  const ss=SpreadsheetApp.getActiveSheet();
  const num=ss.getRange(2,1,1000).getValues();

  //numをC列に出力する
  ss.getRange(2,3,1000).setValues(num);

}

実行結果です。

(・・・中略・・・)

ここまでで、「標準入力その1」は終了致しました。


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

遊歩道で撮影した桜です。

←前の問題へ    標準入力その2へ→      

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

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

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

■ 関連記事 ■

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

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

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

投稿者: nekosiestr

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

モバイルバージョンを終了