この記事を読むことで、ループを使って1000行分もの文字列をPythonの標準入力で文字列を取得・出力する方法、GASでは最初に入力欄を作成して準備を整えた上で、その後に二次元配列として取得、出力する方法が学べます。
このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
【行入力】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を使って解きます。paiza.ioの使い方はこちらから。
■ Pythonでの解き方 ■
下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけ。)
(以下略・・・)
手順として、
1:問題文から1000行と分かっているのでループを1000回まわし、ループの中で標準入力で取得した文字列を変数tempに格納して出力する
で、行います。
この手順で作成したプログラムを実行した出力結果です。
Pythonのコードはこちらになります。
#問題文から1000行と分かっているのでループを1000回まわし、ループの中で標準入力で取得した文字列を変数tempに格納して出力する
for i in range(1000):
temp=input()
print(temp)
■ GASでの解き方 ■
今度は、同じ問題を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から階層を辿ってアクティブシートにアクセスしています。
手順2:A列にpaiza0からpaiza999まで出力するのに事前に文字列を格納する配列columnAを宣言
let columnA=[];
手順3:ループを使って配列columnAにpaiza0からpaiza999までの値を追加していく
//ループを使って配列columnAにpaiza0からpaiza999までの値を追加していく
for(let i=0;i<1000;i++){
columnA.push(['paiza'+i]);
}
手順4:スプレッドシートのA列に格納する前にログで確認する
console.log(columnA);
ログでは1000行は多過ぎて、全ては表示しきれませんでした。
手順5:スプレッドシートのA列の入力の下に配列columnAの値を格納する
ss.getRange(2,1,columnA.length).setValues(columnA);
そのログ出力と実行結果です。
スプレッドシートはpaiza0からpaiza999までの1000行表示出来ました。
(・・・中略・・・)
ここまでのコードです。
function standardInput05(){
//SpreadSheetAppから階層を辿って現在のシートにアクセスする
const ss=SpreadsheetApp.getActiveSheet();
//A列にpaiza0からpaiza999まで出力するのに事前に文字列を格納する配列columnAを宣言
let columnA=[];
//ループを使って配列columnAにpaiza0からpaiza999までの値を追加していく
for(let i=0;i<1000;i++){
columnA.push(['paiza'+i]);
}
//スプレッドシートのA列に格納する前にログで確認する
console.log(columnA);
//スプレッドシートのA列の入力の下に配列columnAの値を格納する
ss.getRange(2,1,columnA.length).setValues(columnA);
}
準備が整ったところで、A列の文字入力部分を二次元配列として取得して、C列の黄色いセルにそのまままの順番で文字列を出力します。プログラミングの手順は下記のようになります。
6:A列の値を定数numに格納する
7:numをC列に出力する
手順6:A列の値を定数numに格納する
const num=ss.getRange(2,1,1000).getValues();
手順7:numをC列に出力する
ss.getRange(2,3,1000).setValues(num);
実行後のスプレッドシートです。見やすくするように、最初の行を固定していあります。
(・・・中略・・・)
GASでの全コードはこちらになります。
function standardInput05() {
//SpreadSheetAppから階層を辿って現在のシートにアクセスする
const ss = SpreadsheetApp.getActiveSheet();
//A列にpaiza0からpaiza999まで出力するのに事前に文字列を格納する配列columnAを宣言
let columnA = [];
//ループを使って配列columnAにpaiza0からpaiza999までの値を追加していく
for (let i = 0; i < 1000; i++) {
columnA.push(['paiza' + i]);
}
//スプレッドシートのA列に格納する前にログで確認する
console.log(columnA);
//スプレッドシートのA列の入力の下に配列columnAの値を格納する
ss.getRange(2, 1, columnA.length).setValues(columnA);
//A列の値を定数numに格納する
const num = ss.getRange(2, 1, 1000).getValues();
//numをC列に出力する
ss.getRange(2, 3, 1000).setValues(num);
}
宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。
東京都足立区、遊歩道の桜
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。