paiza レベルアップ問題集 「FINAL問題! a ~ z までを表示」をPythonとGASの両方で解いてみた

このコーナーでは、学習コンテンツ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サンプル
基本情報技術者試験

←前の問題へ                      次の問題へ→

paiza レベルアップ問題集 「STEP: 6 ある数をある回数表示 2」 をPythonとGASの両方で解いてみた

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

ある数をある回数表示 2 (paizaランク D 相当)

問題:整数N,Kが与えられます。
NをK回、改行区切りで出力して下さい。

具体例として入力例3の、N=39,K=70で考えてみたい所ですが、70回も出力するのは大変なので、(私がブログで記録するには、という個人的な事情でごめんなさいm(_ _)m)、K=7で考えてみます。

この場合、「39」を7回出力します。

入力例3
39 7

出力例3
39
39
39
39
39
39
39

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
今回はN=39,K=7なので、paiza.ioの左下の入力の所を下記のように記述します。

手順として、
1.標準入力でN,Kを読み込み、それぞれにN=39,K=7を代入する
2.ループでK回(7回)繰り返すように設定する
3.N(この例では39)を出力する

コードを見てみましょう。

手順1では、

N,K=map(int,input().rstrip().split(‘ ‘))

で、input()で標準入力を使ってintで整数として取り込んでいます。
mapを使うことで1行の複数の値を取り込めます。
rstrip()では、改行の影響を無効にしています。
split(‘ ‘)で空白区切りの文字を取り込んでいます。

手順2では、

for i in range(K):

で、ループを使って、0,1,2,…K-1まで、ループ内のprint文の処理を施しています。
この問題の場合K=7なので、0,1,2,3,4,5,6までの7回ループを回します。

print(N)

で、N(この場合39)を出力しています。
手順1,2と合わせて、39を7回出力出来ました。

Pythonでの全コードはこちらになります。

N,K=map(int,input().rstrip().split(' '))
for i in range(K):
    print(N)

内包表記を使ってみます。

N,K=map(int,input().rstrip().split(' '))
[print(N) for i in range(K)]

コードを1行減らすことが出来ました。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。

まず、スプレッドシートにこの様に配置しました。

なんか、鮭と卵みたいで美味しそうですね(=^x^=)
黄色い部分のA4からA10までに「39」を7回出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
3:Nに出力する数値(この問題の場合は「39」)を取得する。
4:Kに数値を出力する回数(この問題の場合は「7」)を取得する。
5:ループでK回(この場合はK=7)配列array[]の中に[N](この場合は39)を格納する
6:arrayに二次元配列として39を7回格納出来たことをログ出力で確認する
7:スプレッドシートに表示する。セルA1から8行分なので、getRange(1,1,K)でセルA4からK行分を確保してそこに配列を流し込むイメージ

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する

let array=[];

手順3:スプレッドシートのピンクのセルから表示する数値(この場合39)を取得する。

let N=ss.getRange(1,2).getValue();

手順4:スプレッドシートの灰色のセルから表示する回数(この場合7)を取得する。

let K=ss.getRange(2,2).getValue();

手順5:ループをK回(7回)回して、push([N])を追加して二次元配列として扱えるようにする。

array.push([N]);

ループ全体ではこのようになります。

 for(let i=1;i<=K;i++){
    array.push([N])
  }

手順6:arrayに二次元配列として39を7回格納出来たことをログ出力で確認する

console.log(array);

実行結果です。

手順7:スプレッドシートに表示する。セルA4からK行分なので、getRange(4,1,1)でセルA4からK行分を確保してそこに配列を流し込むイメージ

ss.getRange(4,1,K).setValues(array);

スプレッドシートオブジェクトにgetRangeでセルA1からK行確保し、setValues(array)で出力しています。

スプレッドシートの実行結果です。

GASでの全コードはこちらになります。

<全コード>

function loop6(){

  //スプレッドシートのアクティブシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //シートの黄色い部分に出力用の二次元配列を用意する
  let array=[];

  //表示する数値Nをピンクのセルから取得する
  let N=ss.getRange(1,2).getValue();

  //表示回数K回を灰色のセルから取得する
  let K=ss.getRange(2,2).getValue();

  //ループでK回、arrayに二次元配列としてarray.push([N])で格納する
  for(let i=1;i<=K;i++){
    array.push([N])
  }

  //arrayに二次元配列として取得出来たことをログ表示で確認する。
  console.log(array);

  //出力用の配列arrayを黄色いセルに出力する。
  ss.getRange(4,1,K).setValues(array); 

}

宜しかったらコピペしてアレンジして見て下さい。

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

横浜ランドマークタワーの夕暮れ

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

←前の問題へ                       次の問題へ→         

paiza レベルアップ問題集 「STEP: 5 ある数をある回数表示 1」 をPythonとGASの両方で解いてみた

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

ある数をある回数表示 1 (paizaランク D 相当)

問題:3 を 8 回、改行区切りで出力してください。

回答:期待する出力
3 を 8 回、改行区切りで出力してください。
出力の末尾には改行を入れてください。

3
3
3
3
3
3
3
3

ではまず、Pythonで解いてみます。

<<Pythonでの解き方>>

手順として、
1.ループで8回繰り返すように設定する
2.「3」を出力する

コードを見てみましょう。

手順1では、

for i in range(8):

で、ループを使っています。
変数iには0,1,2,3,4,5,6,7が代入されるので、8回繰り返す処理が設定されます。

手順2では、

print(3)

で、3を出力しています。
手順1,2と合わせて、3を8回出力出来ました。

Pythonでの全コードはこちらになります。

for i in range(8):
    print(3)

尚、内包表記を使うと、このようになります。

[print(3) for i in range(8)]

たったの1行で済んでしまいました。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。

まず、スプレッドシートにこの様に設定しました。
この黄色い部分に結果を出力していきます。

この黄色い部分のA1からA8までに「3」を8回出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
3:ループで8回配列array[]の中に[3]を格納する
4:arrayに二次元配列として3を8回格納出来たことをログ出力で確認する
5:スプレッドシートに表示する。セルA1から8行分なので、getRange(1,1,8)でセルB1から8行分を確保してそこに配列を流し込むイメージ

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する

let array=[];

手順3:ループを8回回して、push([3])を追加して二次元配列として扱えるようにする。

array.push([3]);

ループ全体ではこのようになります。

for(let i=1;i<=8;i++){
    array.push([3]);
  }

手順4:arrayに二次元配列として3を8回格納出来たことをログ出力で確認する

console.log(array);

実行結果です。

手順5:スプレッドシートに表示する。セルA1から8行分なので、getRange(1,1,8)でセルB1から8行分を確保してそこに配列を流し込むイメージ

ss.getRange(1,1,8).setValues(array);

スプレッドシートオブジェクトにgetRangeでセルA1から8行確保し、setValues(array)で出力しています。

スプレッドシートの実行結果です。

GASでの全コードはこちらになります。

function loop5(){
  //アクティブシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //スプレッドシートに出力用の配列を用意する
  let array=[];

  //ループで空の配列に二次元配列として格納する
  for(let i=1;i<=8;i++){
    array.push([3]);
  }

  //ログでarrayに3が8個格納出来たか確認する
  console.log(array);

  //スプレドシートに格納する
  ss.getRange(1,1,8).setValues(array);
}

宜しかったらコピペしてアレンジして見て下さい。

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

スカイツリーからの夜景

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

サイトマップはこちらから

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

←前の問題                      次の問題→