このコーナーでは、学習コンテンツpaizaラーニングのレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。
GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験
paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
BOSS問題 a ~ z までを表示 (paizaランク D 相当)
問題:a ~ z のアルファベットを、改行区切りで出力してください
<<Pythonでの解き方>>
手順として、
1.aの文字コード(97)を求める
2.zの文字コード(122)を求める
3.ループで97〜122+1まで繰り返す
123-97=26で、アルファベット26文字分の出力をします。
4.求めた文字コードを逆にアルファベットに変換して出力する。
コードを見てみましょう。
手順1では、
a=ord(‘a’)
で、小文字’a’の文字コードを97と求めています。
手順2では、
z=ord(‘z’)
で、小文字’z’の文字コードを122と求めています。
手順1、2までのコードを出力するには、この様なコードを書きます。
a=ord('a')
z=ord('z')
print(a,z)
文字コードの出力結果です。
手順3では、ループを使って変数charにaからz+1まで、つまり97,98,99,100…122,123まで、ループ内のprint文の処理を施しています。
122ではなく123と1を加えているのは、rangeの中ではその数未満、つまり123未満になるからです。
for char in range(a,z+1):
手順4では、chr関数を使うことによって、文字コードを文字に変換して、それを出力しています。
print(chr(char))
手順3,4のループではこの様なコードになります。
for char in range(a,z+1):
print(chr(char))
ここまでの全コードはこの様になります。
a=ord('a')
z=ord('z')
for char in range(a,z+1):
print(chr(char))
内包表記を使ってみます。
a=ord('a')
z=ord('z')
[print(chr(char)) for char in range(a,z+1)]
内包表記で、コードを1行分を減らすことが出来ました。
<<GASでの解き方>>
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
アルファベット小文字のa〜zを黄色いセルに出力します。
※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※
手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
3:小文字の’a’の文字コードを求め、ログに出力する。
4:小文字の’z’の文字コードを求め、ログに出力する。
5:Kに数値を出力する回数(この問題の場合は「7」)を取得する。
5:ループでi=97,98…122まで文字コードからアルファベットに変換して空の配列に追加する
6:arrayに二次元配列としてアルファベットが追加されたことをログ出力で確認する
7:スプレッドシートに表示する。セルA1から8行分なので、getRange(1,1,K)でセルA4からK行分を確保してそこに配列を流し込むイメージ
手順1: スプレッドシートからアクティブシートをアクセスする
const ss=SpreadsheetApp.getActiveSheet();
これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
let array=[];
手順3:アルファベットの小文字’a’を文字コードに変換する
let a=’a’.charCodeAt();
ログに出力する
console.log(a);
手順4:アルファベットの小文字’z’を文字コードに変換する
let a=’z’.charCodeAt();
ログに出力する
console.log(z);
手順5:ループで97,98,…122まで文字コードからアルファベットに変更して出力用の配列arrayに追加する。
繰り返し回数の設定
for(let i=a;i<=z;i++)
アルファベットに変換して配列に追加する処理
array.push([String.fromCharCode(i)]);
手順5のループ全体のコードはこちらです。
for(let i=a;i<=z;i++){
array.push([String.fromCharCode(i)]);
}
手順6:arrayに二次元配列としてアルファベットが格納されたことをログで確認する。
console.log(array);
手順7:スプレッドシートの黄色い所にアルファベットを格納した二次元配列arrayを出力する
ss.getRange(1,1,26).setValues(array);
スプレッドシートの実行結果です。
GASでの全コードはこちらになります。
function loop7(){
//スプレッドシートからアクティブシートにアクセスする
ss=SpreadsheetApp.getActiveSheet();
//黄色いセルに出力用の空の配列を用意する
let array=[]
//小文字'a'の文字コードを求めてログに出力
let a='a'.charCodeAt();
console.log(a);
//小文字'z'の文字コードを求めてログに出力
let z='z'.charCodeAt();
console.log(z);
//ループでi=97,98...122まで文字コードからアルファベットに変換して空の配列に追加する
for(let i=a;i<=z;i++){
array.push([String.fromCharCode(i)]);
}
//二次元配列としてアルファベットに追加されたことを確認する
console.log(array);
//スプレッドシートの黄色い所にアルファベットを出力する
ss.getRange(1,1,26).setValues(array);
}
宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした。
ブレイクタイムフォトはこちらになります。
写真は、スカイツリーエレベーター「夏」の江戸切子です。
隅田川の花火をイメージして作られたそうです。
■ 参考文献の紹介■
じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。
GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。
paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験