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

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

PythonでV6の名曲を例に内包表記をしてみた。

この記事を読むと、Pythonの基本的な内包表記を使って、for文を短いコードで動かすことが可能になります。
また、内包表記で今月(2021年11月)に解散してしまったV6の名曲も表記致します。
その際、リストを使って、昇順、降順の表記行っています。

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

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

おはこんばんちは!
うにゃうにゃエンジニアの猫です(=^x^=)

リストの内包表記を通して、この間解散してしまったV6の名曲を振り返ります。
メンバーは
トニセン(年長3人):坂本昌行、長野博、井ノ原快彦
カミセン(年少3人):森田剛、三宅健、岡田准一
で、私はトニセンとカミセンの間の年齢なので、感慨深いものがあります。

まずは、内包表記のごくごく基礎から入って行きます。
0から9まで表示するシンプルなループです。
range(10)となっているので10未満の数が表示されます。

for i in range(10):
    print(i)

結果はこの様になります。

このコードを内包表記を使うとたった1行で書ける様になります。
書式はこの様になります。

[結果 for文]

それでは内包表記で書いていきます。

[print(i) for i in range(10)]

出力結果を改行区切りではなく、配列として表示したい場合を普通のfor文で書くと

#空のリスト
array=[]

#いつものループで空のリストarrayに要素を追加
for i in range(10):
    array.append(i)

print(array)

もっと短く書くには、これも内包表記を使います。

#内包表記でたった1行
print([i for i in range(10)])

次は計算をさせてみます。
この配列の要素それぞれの二乗を求めます。

#[計算式 for文]
print([i**2 for i in range(10)])

慣れてきた所でリストを使います。
計算用リストarrayの要素をそれぞれ二乗しています。

#計算用リスト
array=[1,3,5,7,9,11,13,15]

#[計算式 for in リスト]
print([i**2 for i in array])

リストを使った内包表記にも慣れて来た頃で、いよいよV6の名曲リストを作成します。

#V6の中で特に私が好きな曲
v6=['MUSIC FOR THE PEOPLE',
'愛なんだ',
'WAになっておどろう',
'Darling',
'CHANGE THE WORLD',
'Orange',
'BEAT YOUR HEART',
'MADE IN JAPAN',
'Believe Your Smile',
'Be Yourself!'
]

#[計算式 for in リスト]
[print(music) for music in v6]

表示結果です。

曲名を昇順にしたい時は、コードの途中に

リスト名.sort()

を追記します。

#V6の中で特に私が好きな曲
v6=['MUSIC FOR THE PEOPLE',
'愛なんだ',
'WAになっておどろう',
'Darling',
'CHANGE THE WORLD',
'Orange',
'BEAT YOUR HEART',
'MADE IN JAPAN',
'Believe Your Smile',
'Be Yourself!'
]

#昇順
v6.sort()

#[計算式 for in リスト]
[print(music) for music in v6]

降順にしたい時は

リスト名.sort(reverse=True)

と改変します。

#V6の中で特に私が好きな曲
v6=['MUSIC FOR THE PEOPLE',
'愛なんだ',
'WAになっておどろう',
'Darling',
'CHANGE THE WORLD',
'Orange',
'BEAT YOUR HEART',
'MADE IN JAPAN',
'Believe Your Smile',
'Be Yourself!'
]

#降順
v6.sort(reverse=True)

#[計算式 for in リスト]
[print(music) for music in v6]

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

最後までお読み頂きありがとにゃん(=^x^=)

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

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

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)