この記事を読むことで、Pythonで標準入力を使って、ループを用いて1000行の整数を取得する方法が学べます。
GASではスプレッドシートで値を取得して出力しています。
このコーナーでは、プログラミング学習コンテンツpaizaラーニングのレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。
Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。
Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。
(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、ご安心なさって下さい。)
【整数の行入力】1,000行の整数の入力 (paizaランク D 相当)
問題:
整数 a_1, a_2, … , a_999, a_1000 が 1,000 行で与えられるので a_1, a_2, … , a_999, a_1000 を 1,000 行で出力してください。
ではまず、Pythonで解いてみます。
■ Pythonでの解き方 ■
手順として、
1:ループを使って標準入力で整数を取得し出力する
の1ステップで行います。
今回は下記の入出力例1を用います。
<入力例1>
1189
8004
7243
5507
3237
(省略)
・
・
・
<出力例1>
1189
8004
7243
5507
3237
(省略)
・
・
・
まず、準備として、paiza.ioにこのように入力します。
(入力例1をコピペしたのみ)
1000個の数字と長いので、最初と最後の5件のみの画像を掲載致します。
<最初の5行>

<最後の5行>

それでは、下記のコードで入出力を行います。
ループを1000回まわして、その中で標準入力で変数tempに代入して、tempを出力しています。
intをinputで囲っているのは、取り出す対象が「整数」だからです。
#ループ内で標準入力を使って1000行の整数を取得し出力する
for i in range(1000):
temp=int(input())
print(temp)このコードの実行(出力)結果です。
<最初の5行>

<最後の5行>

Pythonは以上です。
次は、GASで解いて行きます。
■ GASでの解き方 ■
今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
データを貼り付ける時、paizaの問題集の入力例1をコピーしてから、[Ctrl] + [Shift] + [V] のショートカットキーを使うと書式が保たれて貼り付けられます。
また、後ほどスクロールするので、1行目を固定してあります。
行番号を選択すると行全体が選択されるので、その状態で「表示」→「固定」→「行1まで」で固定出来ます。
<最初の5行>

<最後の5行>

緑色の列のセルA2(2,1)から始まる1000行分の所に入力した整数を取得して、それを黄色いセルC2(2,3)から始まる1000行分の所に出力します。
その際、この黄色く塗りつぶした列の所に、二次元配列として取得した整数が格納された配列を出力します。
※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※
手順はこのようになります。
1:SpreadSheetAppから階層を辿って現在のシートにアクセスする
2:緑色のセルA2(2,1)から始まる1000行分の列の整数を取得して1000行の整数を二次元配列numに格納
3:スプレッドシートの出力前に1000行の整数が格納された二次元配列numを取得できたことをログ出力で確認する
4:スプレッドシートの黄色いC2(2,3)から始まる1000行分の列の所に二次元配列numを出力する
手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする
const ss = SpreadsheetApp.getActiveSheet();
ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
このコードを関数「standardInput5」の中に書いて行きます。
Standard Inputで標準入力の意味です。
function standardInput5() {
//SpreadSheetAppから階層を辿って現在のシートにアクセスする
const ss=SpreadsheetApp.getActiveSheet();
}手順2:緑色のセルの列の整数を取得して100個の整数を二次元配列numに格納
num=ss.getRange(2,1,1000).getValues();
緑色のセルA2(2,1)から1000行分のデータを取得することを意味しています。
1列ですので、(2,1,1000)で(2,1,1000,1)と最後の1は省略出来ますが、同様の結果を得られます。
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
//緑色のセルの列の整数を取得して1000行の整数を二次元配列numに格納
const num=ss.getRange(2,1,1000).getValues();
}手順3:スプレッドシートの出力前に100個の整数が格納された二次元配列numを取得できたことをログ出力で確認する
console.log(num);
コードとログ出力結果です。
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
const num=ss.getRange(2,1,1000).getValues();
//スプレッドシートの出力前に1000行の整数が格納された二次元配列numを取得できたことをログ出力で確認する
console.log(num);
}1000行と長いので、最初の一部分のみのログ画像です。

手順4:スプレッドシートの黄色い列の所に二次元配列numを出力する
ss.getRange(2,3,1000).setValues(num);
実行後のスプレッドシートです。
function standardInput5() {
const ss=SpreadsheetApp.getActiveSheet();
const num=ss.getRange(2,1,1000).getValues();
console.log(num);
//スプレッドシートの黄色い列の所に二次元配列numを出力する
ss.getRange(2,3,1000).setValues(num);
}
<最初の5行>

<最後の5行>

GASでの解き方は以上になります。
お疲れ様でした。ブレイクタイムPhotoは、

石神井公園の池のサイクルボートから撮影した桜です。
ご精読有難うございました。
■ GASの入門書の紹介です ■
詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)
■ 関連記事 ■
paizaレベルアップ問題集「標準入力4」へ戻る
paizaレベルアップ問題集_ PythonとGASのコード紹介トップページへ
写真クリエイターとしての活動
自己紹介














































































