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

日の丸を現した噴水イルミネーション。東京メガイルミです。
ご精読有難うございました。
■ GASの入門書の紹介です ■
詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)
■ 関連記事 ■
paizaレベルアップ問題集「ループその1の2」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ
写真クリエイターとしての活動
自己紹介
