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

←前の問題                      次の問題→

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。