このコーナーでは、プログラミング学習コンテンツpaizaラーニングのレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。
Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。
Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。
(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、ご安心なさって下さい。)
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);
}宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした。
ブレイクタイムフォトはこちらになります。

写真は、スカイツリーエレベーター「夏」の江戸切子です。
隅田川の花火をイメージして作られたそうです。
←前の問題へ ループ1の2へ(準備中)→
ご精読有難うございました。
■ GASの入門書の紹介です ■
詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)
■ 関連記事 ■
paizaレベルアップ問題集「ループその1の1」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ
写真クリエイターとしての活動
自己紹介









