paiza レベルアップ問題集 「STEP: 1 数列の反転」をPythonとGASで解いてみた

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

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

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

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

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

数列の反転 (paizaランク D 相当)

問題:長さ N の数列 a (a_1, a_2, …, a_N) が与えられます。
この数列の要素を逆順に、改行区切りで出力してください。

具体例として出力例2の、N=10 リスト「1,2,3,4,5,6,7,8,9,10」を逆順に表示させる処理で考えてみます。

入力例2
10
1 2 3 4 5 6 7 8 9 10

出力例2
10
9
8
7
6
5
4
3
2
1

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

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

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

手順として、
1.標準入力でリストの長さNを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.ループでreversedを使って逆順に設定
4.print文で出力

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

手順1では、

N=int(input())

で、標準入力でリストの個数Nを読み込めます。

手順2では、

array=list(map(int,input().rstrip().split(‘ ‘)))

で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込んでいます。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。

手順3,4では、riversedを使って逆順から出力しています。

for num in reversed(array):
    print(num)

ここまでの全てのコードです。

N=int(input())
array=list(map(int,input().rstrip().split(' ')))

for num in reversed(array):
    print(num)

paiza.ioの出力結果です。

内包表記で書く場合は、ループの所が1行に略せます。

N=int(input())
array=list(map(int,input().rstrip().split(' ')))

[print(num) for num in reversed(array)]    

<<GASでの解き方>>

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

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

緑のセルにN=配列の要素数、薄い灰色の所に配列array、濃い灰色の所に配列array2、減算結果array_ansを黄色の所に求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:緑のセルから配列の長さNに出力する数値(この問題の場合は「10」)を取得する。
3:灰色のセルから(この問題の場合は「1,2,3,4,5,6,7,8,9,10」)を読み込み、配列arrayとしてログ出力sルウ。
4:灰色のセルを反転させてログ出力するintを確認する
5:スプレッドシートの黄色い所のB4である(4,2)から1行N列分に反転したarrayを出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:緑のセルから配列の長さNに出力する数値(この問題の場合は「10」)を取得して、ログ出力する。

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

手順3:灰色のセルから(この問題の場合は「1,2,3,4,5,6,7,8,9,10」)を読み込み、配列arrayとしてログ出力する

let array=ss.getRange(2,2,1,N).getValues();
console.log(array);

これで、元の配列(反転する前の)を確認します。

手順4:配列arrayは二次元配列なので0行目を反転させる

array[0]=array[0].reverse();
console.log(array)

手順5:スプレッドシートの黄色いセルに反転したarrayを出力する

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

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

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

function loop12(){
  //SpreadsheetAppから階層を辿ってアクティブシートをアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //配列の長さNを取得する
  let N=ss.getRange(1,2).getValue();
  console.log(N);

  //arrayを配列として取得してログ出力する
  let array=ss.getRange(2,2,1,N).getValues();
  console.log(array);

  //arrayを反転させてログ出力する
  array[0]=array[0].reverse();
  console.log(array)

  //スプレッドシートの黄色いセルに反転した配列を格納する
  ss.getRange(4,2,1,N).setValues(array);

}

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

お疲れ様でした。

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

東池袋にある、サンシャイン水族館で撮影した空飛ぶペンギン

■ 参考文献の紹介■

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

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

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

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

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

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

paiza レベルアップ問題集 「FINAL問題 数列同士の引き算」をPythonとGASで解いてみた

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

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

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

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

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

数列同士の引き算 Python3編

具体例として出力例1の、N=5 リスト「1,2,3,4,5」からリスト「5,4,3,2,1」で考えてみます。

入力例1
5
1 2 3 4 5
5 4 3 2 1

出力例1
-4
-2
0
2
4

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

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

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

手順として、

1.標準入力でリストの長さNを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.標準入力でリストarrayから減算するarray2を読み込む
4.リストarrayからarray2を減算した答えを格納する空のリスト、array_ansを定義する
5.ループで減算処理と減算結果の格納を同時に行う
6.答えが格納されたarray_ansをループで出力する

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

手順1では、

N=int(input())

で、標準入力でリストの個数Nを読み込めます。

手順2では、

array=list(map(int,input().rstrip().split(‘ ‘)))

で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込んでいます。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。

手順3では、

array2=list(map(int,input().rstrip().split(‘ ‘)))

で、arrayから減算するarray2をリストとして読み込みます。

手順4では、array[i]からarray2[I]の減算結果を格納するリストarray_ansを定義しています。

array_ans=[]

手順5ではループで減算処理と減算結果の格納を同時に行っています。
内包表記を使いました。

内包表記の書式は、

[結果 for いつものfor文]

です。
今回の内包表記のコードは、

[array_ans.append(array[i]-array2[i]) for i in range(N)]

です。

これを通常表記で書くと、

#ループで減算処理と減算結果の格納を同時に行う
for i in range(N):
    array_ans.append(array[i]-array2[i])

に、なります。

手順6では、内包表記を使ってリストarray_ansをループで出力しています。

[print(num) for num in array_ans]

これを通常のループで書くとこうなります。

#答えが格納されたarray_ansをループで出力する
for num in array_ans:
    print(num)

ここまでのコードはこの様になります。

#リストの長さNを取り込む
N=int(input())

#リストarrayを取り込む
array=list(map(int,input().rstrip().split(' ')))

#リストarray2を取り込む
array2=list(map(int,input().rstrip().split(' ')))

#リストarrayからarray2を減算した答えを格納する空のリスト、array_ansを定義する
array_ans=[]

#ループで減算処理と減算結果の格納を同時に行う
[array_ans.append(array[i]-array2[i]) for i in range(N)]
    
#答えが格納されたarray_ansをループで出力する
[print(num) for num in array_ans]

paiza.ioの出力結果です。

<<GASでの解き方>>

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

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

緑のセルにN=配列の要素数、薄い灰色の所に配列array、濃い灰色の所に配列array2、減算結果array_ansを黄色の所に求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:緑のセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。
3:薄い灰色のセルから(この問題の場合は「1,2,3,4,5」)を読み込み、配列arrayとする
4:濃い灰色のセルから(この問題の場合は「5,4,3,2,1」)を読み込み、配列array2とする
5:N及び配列arrayとarray2をログ出力して正しく読み込めたことを確認する
6:減算結果を格納する配列array_ansを定義する
7:減算結果を格納したarray_ansをスプレッドシートに格納出来るようにする二次元配列array_printを定義する
8:ループでi=0からi<Nまでの間、array[0][i]-array2[0][i]の各要素の減算結果をarray_ansに追加する
9:計算結果が入ったarray_ansをスプレッドシートに出力できるように二次元配列として格納するためにarray_printに追加する
10:ログで配列array_ansとarray_printを確認する
11:スプレッドシートの黄色い所のB4である(5,2)から1行N列分にarrayを出力する

手順1: SpreadsheetAppから階層を辿ってアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

手順2:緑のセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。

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

手順3:薄い灰色のセルから(この問題の場合は「1,2,3,4,5」)を読み込み、配列arrayとする

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

手順4:濃い灰色のセルから(この問題の場合は「5,4,3,2,1」)を読み込み、配列array2とする

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

手順5:N及び配列arrayとarray2をログ出力して正しく読み込めたことを確認する

console.log(N);
console.log(array);
console.log(array2);

ログの実行結果です。

手順6:減算結果を格納する配列array_ansを定義する

let array_ans=[];

手順7:減算結果を二次元配列としてスプレッドシートに出力する用の配列array_printを定義する

let array_print=[];

手順8:ループでarray_ansに減算結果を格納する

//ループでarray_ansに減算結果を格納する
  for(let i=0;i<N;i++){
    array_ans.push(array[0][i]-array2[0][i]);
  }

array[0][i]-array2[0][i]となっているのは、スプレッドシートから取得した配列arrayは1行5列の二次元配列なのでこの様にコードを書いて計算しています。

手順9:減算結果を格納したarray_ansをスプレッドシートに二次元配列として出力出来る様に配列array_printに追加する

array_print.push(array_ans);

手順10:array_ansの計算結果及びarray_printに二次元配列として格納できたことをログで確認する

console.log(array_ans);
console.log(array_print);

最後のarray_printが、「1行5列の二次元配列」として格納されています。
この「1行5列だからこそ!」今回の場合では、スプレッドシートの黄色いセル、横方向1行分に格納出来るのです。これは後で出てくるので、今はこの「1行5列」という所を頭の片隅において下さい。

手順11:スプレッドシートの黄色いセルに出力用のarray_ans_printを格納する

ss.getRange(5,2,1,N).setValues(array_print);

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

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

function loop11(){

  //SpreadsheetAppから階層を辿ってアクティブシートをアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //配列の長さNを取得する
  let N=ss.getRange(1,2).getValue();

  //arrayを配列として取得する
  let array=ss.getRange(2,2,1,N).getValues();

  //減算用のarray2を配列として取得する
  let array2=ss.getRange(3,2,1,N).getValues();

  //N,array,array2が取得できたことをログで確認する
  console.log(N);
  console.log(array);
  console.log(array2);

  //減算結果を格納する空の配列array_ansを定義する
  let array_ans=[];

  //減算結果を二次元配列としてスプレッドシートに出力する用の配列array_printを定義する
  let array_print=[];

  //ループでarray_ansに減算結果を格納する
  for(let i=0;i<N;i++){
    array_ans.push(array[0][i]-array2[0][i]);
  }


  //格納した減算結果をスプレッドシートに二次元配列として出力用の配列array_printに追加する
  array_print.push(array_ans);

  //array_ansの計算結果及びarray_printに二次元配列として格納できたことをログで確認する
  console.log(array_ans);
  console.log(array_print);

  //スプレッドシートの黄色いセルに出力用のarray_ans_printを格納する
  ss.getRange(5,2,1,N).setValues(array_print);

}

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

ちなみにarray_printを使わず、25行目をこのように書いて、計算結果array_ansを出力すると、([array[0][i]-arrray2[0][i]])と[]で括っています。)

array_ans.push([array[0][i]-array2[0][i]]);

このように、5行1列になってしまっているので、横方向の1行5列には格納できません。
下のエラー文をざっくり訳すと、

「行数が違っているよ。スプレッドシートの黄色い所は1行分なのに、5行ぶち込もうとしているから、スプレッドシートに出力できないよ」

Exception: The number of rows in the data does not match the number of rows in the range. The data has 5 but the range has 1.

ということになってしまいましたので、縦方向、横方向を確認してからスプレッドシートに格納することがGASでスプレッドシートを扱う上で、1番大事〜〜♪なんですね。

お疲れ様でした。

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

目白庭園。
池袋から一駅

■ 参考文献の紹介■

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

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

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

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

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

←前の問題                        次の問題 →

paiza レベルアップ問題集 「STEP: 3 数列の値を全部 * 2 して出力」をPythonとGASで解いてみた

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

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

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

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

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

数列の値を全部 * 2 して出力 (paizaランク D 相当)

問題:N個の数列を全て2倍にして改行区切りで出力する

具体例として出力例2の、N=5 リスト「0 1 50 99 100」で考えてみます。

出力例2
5
0 1 50 99 100

出力例2
0
2
100
198
200

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

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

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

手順として、
1.標準入力でリストの長さNを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.arrayを2倍にする要素を格納するarray2を宣言する
4.ループを使ってarrayの各要素をarray2に追加する
5.array2を出力

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

手順1では、

N=int(input())

で、標準入力でリストの個数Nを読み込めます。

手順2では、

array=list(map(int,input().rstrip().split(‘ ‘)))

で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込んでいます。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。

手順3では、

array2=[]

で、2倍にするリストを宣言して用意します。

手順4ではループを使って、arrayの各要素を2倍にして、appendでarray2に追加しています。

#ループで各要素を2倍にした結果を配列array2に格納する
for num in array:
    num*=2
    array2.append(num)

手順5でリストarray2を出力しています。

#ループでarray2を出力する
for num in array2:
    print(num)

ここまでのコードはこの様になります。

#リストの個数Nを読み込む
N=int(input())

#リストを読み込む
array=list(map(int,input().rstrip().split(' ')))

#2倍にした要素を格納する配列array2を宣言する
array2=[]

#ループで各要素を2倍にした結果を配列array2に格納する
for num in array:
    num*=2
    array2.append(num)

#ループでarray2を出力する
for num in array2:
    print(num)

paiza.ioの出力結果です。

これでも正解しましたが、もっと短いコードで手順3から5を1つの手順にして、内包表記を使って出力することが可能です。
勿論、出力用の2倍にしたarray2を用意する必要もありません。

[print(num*2) for num in array]

この、たった1行で手順3から5をまとめています。
内包表記は、

[ 結果  for(いつものfor文) ]

という書式です。
内包表記を使ったコードはこちらになります。


#リストの個数Nを読み込む
N=int(input())

#リストを読み込む
array=list(map(int,input().rstrip().split(' ')))

#内包表記のループを使ってリストの各要素の値を2倍にして改行区切りで出力する
[print(num*2) for num in array]

<<GASでの解き方>>

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

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

ピンク色の所にN=配列の要素数、灰色の所に配列、黄色の所にその合計値を求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:緑のセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。
3:灰色のセルから配列(この問題の場合は「0,1,50,99,100」)を読み込み、配列arrayとする
4:N及び配列arrayをログ出力して正しく読み込めたことを確認する
5:ループでi=0からi<Nまでの間、各要素を2倍にする
6:ログで配列arrayの要素が2倍になったことを確認する
7:スプレッドシートの黄色い所のB4である(4,2)にarrayを出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:緑のセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。

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

手順3:灰色のセルから数列(この問題の場合は「0,1,50,99,100」)を読み込み、配列arrayとする

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

手順4:N及び配列arrayをログ出力して正しく読み込めたことを確認する

console.log(N);
console.log(array);

ログの実行結果です。

手順5:ループを使って配列arrayの各要素を2倍にする

  //ループを使って配列arrayの各要素を2倍にする
  for (let i=0;i<N;i++){
    array[0][i]*=2
  }

array[0][i]となっているのは、スプレッドシートから取得した配列arrayは1行5列の二次元配列なのでこの様にコードを書きました。
「*=2」は乗算代入演算子で、計算して2倍にしています。

手順6:arrayの各要素が2倍になったことをログで確認する

console.log(array);

乗算代入演算子でリストが2倍になりました。

手順7:スプレッドシートの黄色い所のB4である(4,2)に2倍の計算結果が格納された配列arrayを出力する

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

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

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

  //数列の長さNを取得する
  let N=ss.getRange(1,2).getValue();

  //配列として取得する
  let array=ss.getRange(2,2,1,N).getValues();

  //ログでNとarrayが正しく取得できたことを確認する
  console.log(N);
  console.log(array);

  //ループを使って配列arrayの各要素を2倍にする
  for (let i=0;i<N;i++){
    array[0][i]*=2
  }

  //arrayの各要素が2倍になったことをログで確認する
  console.log(array);

  //スプレッドシートに出力する
  ss.getRange(4,2,1,N).setValues(array);  

}

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

お疲れ様でした。

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

日の丸を現した噴水イルミネーション。東京メガイルミ(大井競馬場)

■ 参考文献の紹介■

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

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

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

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

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

←前の問題                      次の問題→

paiza レベルアップ問題集 「STEP: 2 数列の A 番目から B 番目までの和」をPythonとGASで解いてみた

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

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

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

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

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

数列の A 番目から B 番目までの和 (paizaランク D 相当)

問題:N個の数列のA番目からB番目までの和を求める

具体例として入力例1の、N=5,A=1,B=3、リスト「1 2 3 4 5」で考えてみます。

入力例1
5 1 3
1 2 3 4 5

出力例1
6

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

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

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

手順として、
1.標準入力でN,A,Bを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.計算結果ansを0で初期化
4.ループとスライスを使ってans+=numを加算代入演算子で合計を求めている
5.計算結果を出力

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

手順1では、

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

で、標準入力でリストの個数N,合計する最初のA番目,合計する最後のB番目を取り込んでいます。
mapで複数の数を読み込めます。

手順2では、

array=list(map(int,input().rstrip().split(‘ ‘)))

で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込む形式を指定しています。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。

手順3では、

ans=0

計算結果の合計値を入れるansを0で初期化します。

手順4ではループとスライスを使って、A番目からB番目までの合計を求めています。
ここで注意すべき所は、リストの添字は0から始まることです。
つまり、ans=array[A-1]からarray[B-1]までの合計になります。

スライスを使う場合、array[最初:最後未満]なので、この場合は

array[A-1:B]

と指定します。

#ループとスライスを使って添字A-1からB-1までの合計を求める
for num in array[A-1:B]:
    ans+=num

手順5で計算結果を出力しています。

ここまでのコードはこの様になります。

#配列の数、合計の最初と最後を読み込む
N,A,B=map(int,input().rstrip().split(' '))

#N個の配列を読み込む
array=list(map(int,input().rstrip().split(' ')))

#合計を0で初期化
ans=0

#ループとスライスを使って添字A-1からB-1までの合計を求める
for num in array[A-1:B]:
    ans+=num

#計算結果を出力
print(ans)    

<<GASでの解き方>>

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

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

ピンク色の所にN=配列の要素数、灰色の所に配列、黄色の所にその合計値を求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:ピンクのセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。
3:緑のセルから配列の合計範囲の最初のA番目(この問題の場合は「1」)を取得する。
4:オレンジのセルから配列の合計範囲の最後のB番目(この問題の場合は「3」)を取得する。
5:灰色のセルから配列(この問題の場合は「1,2,3,4,5」)を読み込み、配列arrayとする
6:N,A,B,及び配列arrayをログ出力して正しく読み込めたことを確認する
7:合計値ans=0と0で初期化する
8:ループでA-1からBまでの間加算処理をする
9:計算結果をログ出力する
10:スプレッドシートに合計値を出力する配列calcを定義する
11:計算結果ansを出力用配列calcに二次元配列として追加する
12:配列calcに追加されたことをログ出力で確認する
13:スプレッドシートの黄色い所のB7である(7,2)に答えが格納された配列calcを出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:ピンクのセルから配列の長さNに出力する数値(この問題の場合は「5」)を取得する。

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

手順3:緑のセルから配列の合計範囲の最初のA番目(この問題の場合は「1」)を取得する。

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

手順4:オレンジのセルから配列の合計範囲の最後のB番目(この問題の場合は「3」)を取得する。

let B=ss.getRange(3,2).getValue();

手順5:灰色のセルから配列(この問題の場合は「1,2,3,4,5」)を読み込み、配列arrayとする

let array=ss.getRange(5,2,1,N).getValues();

手順6:N,A,B,及び配列arrayをログ出力して正しく読み込めたことを確認する

console.log(N);
console.log(A);
console.log(B);
console.log(array);

ログの実行結果です。

手順7:合計値ans=0と0で初期化する

let ans=0;

手順8:ループでA-1からBまでの間加算処理をする

加算代入演算子+=で、ansに合計しています。
スプレッドシートから取得した配列arrayは1行4列の二次元配列になっています。

ans+=array[0][i];

ループ全体のコードです。
配列の添字は0から始まるので、forの()内は下記の様になります。

  //ループでリストの指定された範囲の合計値を求める
  for(let i=A-1;i<B;i++){
    ans+=array[0][i]; 
  }

手順9:計算結果をログ出力する

console.log(ans);

手順10:スプレッドシートに合計値を出力する配列calcを定義する

let calc=[]

手順11:計算結果ansを出力用配列calcに二次元配列として追加する

calc.push([ans]);

手順12:配列calcに追加されたことをログ出力で確認する

console.log(calc);

手順13:スプレッドシートの黄色い所のB7である(7,2)に答えが格納された配列calcを出力する

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

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

<全コード>

function loop9(){

  //スプレッドシートからアクティブシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
  //リストの個数を読み込む
  let N=ss.getRange(1,2).getValue();

  //合計範囲の最初を読み込む
  let A=ss.getRange(2,2).getValue();

  //合計範囲の最後を読み込む
  let B=ss.getRange(3,2).getValue();

  //配列を読み込む
  let array=ss.getRange(5,2,1,N).getValues();

  //N,A,B,arrayが読み込めたことをそれぞれ確認する
  console.log(N);
  console.log(A);
  console.log(B);
  console.log(array);

  //合計値を初期化する
  let ans=0;

  //ループでリストの指定された範囲の合計値を求める
  for(let i=A-1;i<B;i++){
    ans+=array[0][i]; 
  }
  
  //合計値をログで確認する
  console.log(ans);

  //スプレッドシートに合計値を出力する配列calcを定義する
  let calc=[]

  //出力用配列calcに計算結果のansを二次元配列として追加する
  calc.push([ans]);

  //スプレッドシートに出力するcalcにansが格納されたことをログで確認する
  console.log(calc);

  //スプレッドシートの黄色いセルに計算結果を格納する
  ss.getRange(7,2).setValue(calc);

}

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

お疲れ様でした。

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

東京メガイルミ 大井競馬場

■ 参考文献の紹介■

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

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

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

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

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

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

paiza レベルアップ問題集 「STEP: 1 数列の和」 をPythonとGASの両方で解いてみた

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

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

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

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

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

数列の和 (paizaランク D 相当)

問題:1行目に整数Nが与えられ、2行目にN個の数列が与えら、その和を求める。

具体例として入力例3の、N=6,「8,1,3,8,1,3」で考えてみます。

入力例3
6
8 1 3 8 1 3

出力例3
24

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

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

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

<io初期>

手順として、
1.標準入力でNを読み込む
2.標準入力でリストとしてリストarrayを読み込む
3.sum関数で合計値を出力

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

手順1では、

N=int(input())

で、input()で標準入力を使ってintで整数として取り込んでいます。

手順2では、

array=list(map(int,input().rstrip().split(‘ ‘)))

で、リストとして複数の数を標準入力で読み込んでいます。
listを使ってリストとしています。
mapで複数の数を読み込めます。
intで整数として読み込みます。
rstripで改行による影響を受けない様にして、split(‘ ‘)でスペース区切りの数値を読み込みます。

手順3では、

print(sum(array))

で合計値を求めます。

ここまでのコードはこの様になります。

<コード1>

N=int(input())
array=list(map(int,input().rstrip().split(' ')))
print(sum(array))

ただ、この問題、ループを使うんですよね。
なので、ループを使ってみると、合計を入れる用の変数ansを用意して、そこに0を代入して初期化しています。

ans=0

この後ループでansに加算します。

ans+=num

の所で加算しています。
ans=ans+numを略した形で書いています。

ループの部分コードです。

for num in array:
    ans+=num

ここまでのコードです。

<コード2>

N=int(input())
array=list(map(int,input().rstrip().split(' ')))

#合計を入れる変数ansを用意する
ans=0

for num in array:
    ans+=num

print(ans)

<<GASでの解き方>>

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

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

<スプレッドシートビフォア>

ピンク色の所にN=配列の要素数の6、灰色の所に配列、黄色の所にその合計値を求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:スプレドシートの黄色いセルに出力するのに用いる空の配列をarrayを定義する
3:合計値ans=0と0で初期化する
4:ピンクのセルから配列の長さNに出力する数値(この問題の場合は「6」)を取得する。
5:空の配列cellを用意して、灰色の範囲から配列を取得する。
6:ループでN回(この場合はN=6)ansに加算する
7:ansの計算結果をログに出力して確認する
8:arrayに二次元配列としてansを追加する
9:arrayに追加されたことをログ出力で確認する
10:スプレッドシートの黄色い所にB4である(4,2)表示する。

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

const ss=SpreadsheetApp.getActiveSheet();

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

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

let array=[];

手順3:合計値ansを0で初期化する

ans=0;

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

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

手順5:スプレッドシートの灰色のセル範囲から配列(8,1,3,8,1,3)を取得する。

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

手順6:ループをN回(6回)回してansに加算する

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

//ループでN回(この場合はN=6)ansに加算する
  for (let i=0;i<N;i++){
    ans+=cell[0][i];
  }

手順7:ansの計算結果ををログとして出力する

console.log(ans);

ログの出力結果です。

手順8:計算結果ansを二次元配列になるようにarrayに追加する

array.push([ans]);

手順9:スプレッドシートに入力するのにansが二次元配列になっているのかをログで出力して確認する。

console.log(array);

ログの出力結果です。

手順10:計算結果が入った二次元配列arrayをスプレッドシートの黄色いセルに出力する。

ss.getRange(4,2).setValue(array);

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

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

function loop8(){

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

  //スプレドシートの黄色いセルに出力するのに用いる空の配列をarrayを定義する
  let array=[];

  //計算結果を格納する合計値ans=0と0で初期化する
  ans=0;

  //ピンクのセルから配列の長さNに出力する数値(この問題の場合は「6」)を取得する。
  let N=ss.getRange(1,2).getValue();

  //空の配列cellを用意して、灰色の範囲から配列を取得する。
  let cell=ss.getRange(2,2,1,N).getValues();

  //ループでN回(この場合はN=6)ansに加算する
  for (let i=0;i<N;i++){
    ans+=cell[0][i];
  }

  //ansの計算結果をログに出力して確認する
  console.log(ans);

  //arrayに二次元配列としてansを追加する
  array.push([ans]);

  //arrayに追加されたことをログ出力で確認する
  console.log(array);

  //スプレッドシートの黄色い所にB4である(4,2)表示する。
  ss.getRange(4,2).setValue(array);


}

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

お疲れ様でした。

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

OLYMPUS DIGITAL CAMERA


写真は、2021年の桜です。

■ 参考文献の紹介■

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

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

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

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

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

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

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サンプル
基本情報技術者試験

←前の問題                      次の問題→

paiza レベルアップ問題集 「STEP: 4 数字の受け取り 2」 をPythonとGASの両方で解いてみた

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

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

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

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

数字の受け取り 2 (paizaランク D 相当)

この問題では、N個の数字が与えられます。
例えば、N=5で5個の場合、
1 2 3 4 5
の数字が与えられます。

入力例3
8
8 1 3 8 1 3 8 1

出力例3
8
1
3
8
1
3
8
1

この入力例の場合は、N=8で8個の数字が与えられます。
これを改行区切りで表示します。

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

<<Pythonでの解き方>>

paiza.ioで、出力例3で実行してみます。paiza.ioの使い方はこちらの記事をご覧下さい。

手順として、
1.数がN個あるので(この場合N=8)、8を標準入力読み込んでNに代入する
2.8個のスペース区切りの数を標準入力で読み込んで配列arrayに代入する
3.ループで出力する。

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

手順1では、

N=int(input())

で、標準入力を数値として読み込みます。

手順2では、

array=list(map(int,input().rstrip().split(‘ ‘)))

で、配列としてスペース区切りの数値を標準入力で読み込みます。
rstripで改行の影響を無くします。
split(‘ ‘)でスペース区切りの数字を読み込みます。

手順3ではループで配列の各要素をnumに代入して出力しています。

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

N=int(input())
array=list(map(int,input().rstrip().split(' ')))

for num in array:
    print(num)

<<GASでの解き方>>

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

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

濃い灰色のセルの所に配列の個数8を用意します。
薄い灰色のセルの所に数字「8 1 3 8 1 3 8 1」を用意します。

これをB4からB11の黄色いセルに出力します。

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

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

1:からの配列arrayを定義する(後で2次元配列として黄色い所に出力)
2:スプレッドシートからアクティブシートをアクセスする
2:配列の要素数Nを定義する
4:変数cellに、数値をセルB2からI2まで読み込む
5:読み込んだ変数cellをログに出力する
6:ループで0からN未満までを回して、「array.push(cell[0][i])」で付け加えて、二次元配列にする。
(スプレッドシートの薄い灰色の所で取得した配列はcell[0][0]からcell[0][N-1]となる。それを二次元配列として追加するため、array.push([cell[0][i]])でi<Nまでループを回す。)
7:ログに表示
8:スプレッドシートに表示する。セルB4からN行分なので、getRange(4,2,N)でセルB4からN行分を確保してそこに配列を流し込むイメージ

手順1では、このように空の配列を用意して、この配列を使って、最後に黄色い範囲に出力します。

let array=[]

手順2では、アクティブなシートを用意します。

ss=SpreadsheetApp.getActiveSheet();

手順3では、配列の要素数N(この例では8個)を読み込みます。

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

手順4では、配列が入力されている薄い灰色の部分を読み込みます。

cell=ss.getRange(2,2,1,N).getValues();

手順5では読み込んだcell(二次元配列、1行8列)を出力します。

cell=ss.getRange(2,2,1,N).getValues();

手順6では、ループを使って出力用の空の配列arrayに追加して行っています。

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

iが0からN未満のループを使っています。
配列は0から始まるので、ループは0からN未満になります。
空の配列arrayに、

array.push([cell[0][i]]);

で追加しています。
cellはスプレッドシートの配列が格納されている薄灰色の部分です。
これは1行目に要素が8あるので、cell[0][i]でループを回しながら追加しています。

手順7で、スプレッドシートに格納する、空だった配列arrayを出力しています。

console.log(array);

最初の行ではcellで取得した所を表示していて、次の行では、2次元配列として追加して行ったarrayを表しています。


手順8でスプレッドシートに二次元配列arrayを出力しています。

cell2=ss.getRange(4,2,N).setValues(array);

実行結果です。

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

function loop4(){

  //後で出力する様の空の配列。
  //これを二次元配列として追加していく
  let array=[] 
  
  //アクティブなスプレッドシートを用意する
  ss=SpreadsheetApp.getActiveSheet();

  //数字の数を読み込む 
  N=ss.getRange(1,2,1).getValue(); 

  //N個の数字を読み込む
  cell=ss.getRange(2,2,1,N).getValues(); 

  //範囲cellを出力
  console.log(cell);

  //ループで出力用の配列arrayを追加していく
  for(let i=0;i<N;i++){
    array.push([cell[0][i]]);
  }

  //2次元配列になったarrayをログ表示
  console.log(array);

  //スプレッドシートの黄色い所に出力
  cell2=ss.getRange(4,2,N).setValues(array); 

}

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

おまけですが、良くある凡ミスエラーとして、行めのsetValue’s’(array)をsetValue(array)と、setValuesのsを抜かしてしまうことです。
結果、このようなエラーになってしまいます。

お疲れ様でした。

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

羽田空港第1ターミナル

■ 参考文献の紹介■

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

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

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

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

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

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

paiza レベルアップ問題集 「STEP: 3 数字の受け取り 1」 をPythonとGASの両方で解いてみた

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

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

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

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

数字の受け取り 1 (paizaランク D 相当)

この問題では、標準入力で任意の数列が与えられ、それを改行区切りで出力します。
入力例1: 1 2 3 4 5 6 7 8 9 10

出力例1:
1
2
3
4
5
6
7
8
9
10

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

<<Pythonでの解き方>>

手順として、
1.array=list(map(int,input().rstrip().split(‘ ‘)))で配列として標準入力を読み込み
2.for文でrange(0,len(array))を設定
3.print文で出力

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

手順1で配列として標準入力で、読み込むのにlist、複数の値を読み込むのにmapとその引数int。改行の影響を受けないようにrsprit、スペース区切りで読み込むのにsplit(‘ ‘)を使っています。
配列array=[1,2,3,4,5,6,7,8,9,10]と取り込まれ、その添字はarray[0]=1,array[1]=2,array[2]=3,array[3]=4,array[4]=5,array[5]=6,array[6]=7,array[7]=8,array[8]=9,array[9]=10です。

手順2で、まずlen(array)は、配列arrayの長さ(この場合は10)を求めています。
ループを使って範囲を(0,len(array))で、指定したlen(array)=長さ10未満を出力します。
つまり、配列の添字0,1,2,3,4,5,6,7,8,9の10を表示します。
array[i]をループで回してそこに0から9までを入れて、array[0]からarray[9]を出力します。

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

array=list(map(int,input().rstrip().split(' ')))
for i in range(len(array)):
    print(array[i])

<<GASでの解き方>>

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

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

灰色のセル1〜10を配列の数値とします。
これを黄色いセルに出力します。

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

手順はこのようになります。
1:配列arrayを定義する
2:スプレッドシートからアクティブシートをアクセスする
3:変数cellに、灰色の所の数値をセルB1からK1まで読み込む
4:変数cellに値が格納されたことをログで確認します。
5:ループを0から10未満までを回して、「array.push[i]」で付け加えて、二次元配列にする。
(array.push(i)だと1次元配列になり、二次元配列ではないと、二次元配列のスプレッドシートには読み込めないため。)
6:ログに表示
7:スプレッドシートに表示する。セルB3からarray.length[0]行分なので、getRange(3,2,array.length[0])でセルB3からarrray.length[0]行分を確保してそこに配列を流し込むイメージ

手順1では、後にスプレッドシートの黄色い所に出力するのに使う配列arrayを定義します。

let array=[];

手順2では、アクティブなスプレッドシートにアクセスします。

ss=SpreadsheetApp.getActiveSheet();

手順3では、灰色の所を変数cellに代入します。

cell=ss.getRange(1,2,1,10).getValues();

手順4では、変数cellにスプレッドシートから無事に値が格納されたことを確認します。

console.log(cell);

手順5では、配列cellの0行目の添字0から10未満までループを回して、空の配列arrayに二次元配列として値を格納します。

for(let i=0;i<10;i++){
    array.push([cell[0][i]]);
  }

array.push([cell[0][i]])

と、なっているのは、スプレッドシートでは二次元配列として格納されるので、1行目の1列から最後の列まで格納して行っています。

手順6では、arrayが二次元配列として値が格納されたことをログで確認しています。

手順7では、arrayをスプレッドシートの黄色い部分に格納しています。

実行結果です。

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

function loop3(){
  
  //スプレッドシートの黄色い所に格納するのに使う空の配列を定義します。
  let array=[];

  //アクティブなシートにアクセスします。
  ss=SpreadsheetApp.getActiveSheet();

  //スプレッドシートの灰色の所の数値を変数cellに格納します。
  cell=ss.getRange(1,2,1,10).getValues();
  
  //格納出来たことをログで確認します。
  console.log(cell);

  //ループで配列の添字0から10未満までループを回して空の配列に格納します。
  for(let i=0;i<10;i++){
    array.push([cell[0][i]]);
  }

  //スプレッドシート格納に使うarrayに格納されたことをログで格納する
  console.log(array);

  //スプレッドシートの黄色い部分に格納
  ss.getRange(3,2,cell[0].length).setValues(array);

}

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

お疲れ様でした。

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

都庁前の噴水です。

■ 参考文献の紹介 ■

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

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

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

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

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

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