この記事を読むことで、PythonとGASで空白スペースを含む1行の文字列を取得して、空白スペースの所で区切って、ループを使って3つの文字列に出力する方法が学べます。また、GASではスプレッドシートを用いて値を取得して出力しています。
更にPythonではループを基本的な書き方と内包表記の書き方の2通りで掲載します。
このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
半角スペース区切りの 3 つの入力 (paizaランク D 相当)
問題:文字列 s_1, s_2, s_3 が半角スペースで区切られて 1 行で与えられます。
各文字列を出力するごとに改行し 3 行で出力してください。
ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。
■ Pythonでの解き方 ■
手順として、
1:標準入力で空白スペースを含む文字列を区切って取得する
2:取得した文字列がリストになっていることを確認する
3:ループを使って出力する
の3ステップで行います。
今回は下記の入出力例1を用います。
入力例1
good morning paiza
出力例1
good
morning
paiza
まず、準備として、paiza.ioにこのように入力します。
(入力例1をコピペしたのみ)
手順1で標準入力で空白文字を区切って取得します。
#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')
手順2では先ほどの手順で取得した文字列を出力して、リストとして空白区切りで出力されていることを確認します。
#取得した文字列がリストになっていることを確認する
print(s)
手順3ではループを使って出力します。
#ループを使って出力する
for string in s:
print(string)
これを内包表記を使って書いた場合のコードです。先ほどのコードと見比べると、1行になりよりシンプルなコードが書けました。
#ループを使って出力する
for string in s:
print(string)
#内包表記を使ったループで出力する
[print(string) for string in s]
ここまでのコードをまとめます。
#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')
#取得した文字列がリストになっていることを確認する
print(s)
#ループを使って出力する
for string in s:
print(string)
#内包表記を使ったループで出力する
[print(string) for string in s]
ただ、このままでは求められる出力結果に対して冗長な部分があるので、不要な箇所はコメントアウトします。
#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')
#取得した文字列がリストになっていることを確認する
#print(s)
#ループを使って出力する
#for string in s:
# print(string)
#内包表記を使ったループで出力する
[print(string) for string in s]
更に提出ように最小限のコードになるようにしたスッキリなコードはこちらになります。
#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')
#内包表記を使ったループで出力する
[print(string) for string in s]
提出する直前の出力結果です。
■ GASでの解き方 ■
今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
緑色の所に入力した文字列を取得して、それを黄色い所に出力します。その際、この黄色く塗りつぶしたセルの所に、二次元配列として取得した文字列が格納された配列を出力します。
※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※
手順はこのようになります。
1:SpreadSheetAppから階層を辿って現在のシートにアクセスする
2:緑色のセルの所を取得して、空白区切り文字の所で区切って定数sに格納する
3:定数sに配列として格納出来たことをログ出力で確認する
4:スプレッドシートに出力するため、二次元配列として取得するs2を宣言する
5:ループを使ってpushメソッドでs2にsを2次元配列として追加する
6:スプレッドシートに出力する前にs2に二次元配列として格納されていることをログ出力で確認する
7:スプレッドシートの黄色いセルに出力する
手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする
const ss = SpreadsheetApp.getActiveSheet();
ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2:緑色のセルの所を取得して、空白区切り文字の所で区切って定数sに格納する
const s=ss.getRange(1,2).getValue().split(‘ ‘);
手順3:定数sに格納出来たことをログ出力で確認する
console.log(s);
手順4:スプレッドシートに出力するため、二次元配列として取得するs2を宣言する
let s2 = [];
手順5:ループを使ってpushメソッドでs2にsを2次元配列として追加する
//ループを使ってpushメソッドでs2にsを2次元配列として追加する
for(let i=0;i<s.length;i++){
s2.push([s[i]]);
}
手順6:スプレッドシートに出力する前にs2に二次元配列として格納されていることをログ出力で確認する
console.log(s2);
手順7:スプレッドシートの黄色いセルに出力する
ss.getRange(3,2,s2.length).setValues(s2);
実行後のスプレッドシートです。
GASでの全コードはこちらになります。
function standardInput11() {
//SpreadSheetAppから階層を辿って現在のシートにアクセスする
const ss = SpreadsheetApp.getActiveSheet();
//緑色のセルの所を取得して、空白区切り文字の所で区切って定数sに格納する
const s = ss.getRange(1, 2).getValue().split(' ');
//定数sに配列として格納出来たことをログ出力で確認する
console.log(s);
//スプレッドシートに出力するため、二次元配列として取得するs2を宣言する
let s2 = [];
//ループを使ってpushメソッドでs2にsを2次元配列として追加する
for (let i = 0; i < s.length; i++) {
s2.push([s[i]]);
}
//スプレッドシートに出力する前にs2に二次元配列として格納されていることをログ出力で確認する
console.log(s2);
//スプレッドシートの黄色いセルに出力する
ss.getRange(3, 2, s2.length).setValues(s2);
}
宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。
水元公園、ゴールデンウィークにサイクリングでグリーンエクササイズ(2018年コロナ前撮影)
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。