paiza レベルアップ問題集 標準入力その4「STEP: 4 100 行の整数の入力」をPythonとGASで解いたコードの紹介

この記事を読むことで、Pythonでループを用いてループの中で標準入力を使って、100個の整数を取得する方法が学べます。

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

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

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

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

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


100 行の整数の入力 (paizaランク D 相当)

問題:
整数 a_1, a_2, … , a_99, a_100 が 100 行で与えられるので a_1, a_2, … , a_99, a_100 を 100 行で出力してください。

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

手順として、

1:ループを使って標準入力で整数を取得し出力する

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

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

入力例1
4090
4199
9064
6517
9620



(省略)



7940
452
7535
9976
4574

出力例1
4090
4199
9064
6517
9620



(省略)



7940
452
7535
9976
4574

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

100個の整数を全て表示するのは大変なので、最初の5つと最後の5つの画像です。

<最初の5つの整数

Green rounded button reading '実行 (Ctrl-Enter)' with a white arrow; below is a tab labeled '入力' and a vertical list of numbers: 4090, 4199, 9064, 6517, 9620.

<最後の5つの整数>

Green button labeled 実行 (Ctrl-Enter) at the top, with an input tab and a vertical list of numbers: 7940, 452, 7535, 9976, 4574.

このコードでループを用いた標準入力の入出力を行います。
ループを100回まわして、その中で標準入力で変数tempに代入して、tempを出力しています。

整数を標準入力で取り込んでいるので、intの中にinputを入れています。

#標準入力で100行取り込んで出力する
for i in range(100):
    temp=int(input())
    print(temp)

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

<前半5つの整数>

Green rounded Run button labeled 実行 (Ctrl-Enter); tab bar shows 出力, 入力, コメント with a blue 0 badge; below is a column of numbers: 4090, 4199, 9064, 6517, 9620.

<後半5つの整数>

UI screenshot of a Japanese coding console: a green rounded Run button labeled 実行 (Ctrl-Enter) at the top, a tab bar showing 出力, 入力, コメント with a blue 0 badge, and an output area listing the numbers 7940, 452, 7535, 9976, 4574.

Pythonは以上です。

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


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

問題集の入力例1をコピーしてからショートカットキーで、緑のセルA2(2,1)から始まる所に [ Ctrl ] + [ Shift ] + [ V ]と貼り付けると色が変わらないで貼り付けられます。

<数値前半5つ>

Spreadsheet showing inputs in column A (入力): 4090, 4199, 9064, 6517, 9620; outputs in column C (出力) are blank yellow cells.

1行目で固定してスクロールの対策をしております。
行の「1」の所を選択すると行全体が選択されるので、その状態で 表示 → 固定 → 行1まで と行の表示の固定で固定してあるので、スクロールしてもタイトルの入力、出力は表示されます。

<数値後半5つ>

Spreadsheet excerpt: columns A–C with headers; B column shows 入力 values 7940, 452, 7535, 9976, 4574 in green cells, and C column shows blank yellow cells labeled 出力 for outputs. Or: Table with inputs in column B (green) and blank outputs in column C (yellow); headers A, B, C and Japanese labels 入力 (input) and 出力 (output). Or: Numeric inputs column B: 7940, 452, 7535, 9976, 4574; column C reserved for outputs (yellow).

緑色の列の所に入力した整数、セルA2(2,1)から始まる100行分の整数を取得して、それを黄色いセルC2 (2,3)から始まる100行分に出力します。

その際この黄色いセルに、二次元配列として取得した整数が格納された配列を出力します。

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

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

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

2:緑色のセルB1(2,1)から始まる列の整数を取得して、100個の整数を二次元配列numに格納

3:スプレッドシートの出力前に100個の整数が格納された二次元配列numを取得できたことをログ出力で確認する

4:スプレッドシートの黄色い列C2(2,3)の所から100行分に二次元配列numを出力する

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

const ss = SpreadsheetApp.getActiveSheet();

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

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

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

function standardInput4() {

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

}

手順2:緑色のセルA2(2,1)から始まる列の整数を取得して100個の整数を二次元配列numに格納する

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

function standardInput4() {

  const ss = SpreadsheetApp.getActiveSheet();

  //緑色のセルA2(2,1)から始まるの列の整数100個を取得して整数を二次元配列numに格納
  const num = ss.getRange(2,1,100).getValues();

}

ss.getRange(2,1,100)ですが、(2,1)がセルA2です。
そこから100行分ですので、その後のカンマの後の数字は100行の100です。
1列分の1は省略可能ですが、ss.getRange(2,1,100,1)と書いても動作します。

手順3:スプレッドシートの出力前に100個の整数が格納された二次元配列numを取得できたことをログ出力で確認する

console.log(num);

コードと実行結果です。ログの画像は数値の最初の方の一部です。
(ログでは配列が長くて100個確認が出来なかった為。)

function standardInput4() {

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

  //スプレッドシートの出力前に100個の整数が格納された二次元配列numを取得できたことをログ出力で確認する
  console.log(num);

}
Japanese header '実行開始' above a vertical column of bracketed numbers, e.g., [4090], [4199], [9064], [6517], [9620], [4155], [5688], [8290], [819], [8733], [4409], [556], [6223], [6231].

手順4:スプレッドシートの黄色い列の所に二次元配列numを出力する

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

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

function standardInput4() {

  const ss = SpreadsheetApp.getActiveSheet();
  const num = ss.getRange(2,1,100,).getValues();
  console.log(num);

  //スプレッドシートの黄色い列C2(2,3)から100行分の所に二次元配列numを出力する
  ss.getRange(2,3,100).setValues(num);

}

<出力した数値の前半5つ>

Spreadsheet with Input (green) and Output (yellow) columns; left column shows 4090, 4199, 9064, 6517, 9620, and right column repeats the same numbers as outputs.

<出力した数値の後半5つ>

Spreadsheet with two columns: 输入 (left, green) and 输出 (right, yellow) showing numbers 7940, 452, 7535, 9976, 4574 across rows 97–101, matching values side by side.

GASは以上になります。


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

Branches of a cherry blossom tree with white flowers against a clear blue sky.

遊歩道の桜です。
歩きながら、青空と桜に元気を貰いました。

勉強で疲れた時に見て下さると嬉しいです。

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

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

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

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

■ 関連記事 ■

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

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

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

投稿者: nekosiestr

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