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

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

【Python関数で長方形、三角形、台形】関数を「カレーライス」に例えて、平面図形の面積を求める

この記事を読むことで、

Pythonの関数をカレーライスを作る例を通して理解

簡単な平面図形の面積が求められる

についての概要が掴めます。

関数とは、ざっくり言って、「カレー鍋」です。
鍋に入れる「ジャガイモ、ニンジン」が引数、出てきた料理が戻り値です。

それでは、肩の力を抜いて、長方形、三角形、台形の面積を使いながら関数に慣れて行きましょう!


最初に、縦5cm、横3cmの長方形の面積を計算します。
コードと実行結果を載せます。

#長方形の面積を計算する関数
def rectangle(x,y):
  return x*y

#長方形の縦と横の長さを設定
vertical=5
beside=3

#長方形の面積を計算する関数を呼び出して戻り値をareaとする
area=rectangle(vertical,beside)

print('長方形の面積は【'+str(area)+'】cm^2+です。')

では、簡単ですが、このプログラムをトレースしてみます。
長方形面積は、「縦×横」ですね。

変数verticalに縦の長さをここでは「5」、変数besideに横の長さをここでは「3」とします。

長方形はrectangleなので、長方形を計算する関数をrectangleとしました。
ですので、カレー鍋がrectangleになります。

area=rectangle(vertical,beside)

これで、rectangleというカレー鍋に、ジャガイモのverticalと、ニンジンのbesideが入って煮込みます。

def rectangle(x,y): 
 return x*y

鍋に入れるときに、verticalはx、besideはyに入ります。

verticalやbesideが引数と呼ばれることに対し、x,yは仮引数と呼ばれます。

return x*y

で、出来上がったカレーライスがお手元に届けられます。

コードの縦verticalと横besideの値を変えると、当然求まってくる長方形の面積も変わりますので、コードを書き換えてみます。

縦8cm、横11cmにしてみます。

#長方形の面積を計算する関数
def rectangle(x,y):
  return x*y

#長方形の縦と横の長さを設定←ここの長さを変える
vertical=8
beside=11

#長方形の面積を計算する関数を呼び出して戻り値をareaとする
area=rectangle(vertical,beside)

print('長方形の面積は【'+str(area)+'】cm^2+です。')

ここで変数や関数名のことですが、基本的に英語にしますので、ローマ字でtate、yoko,chouhoukeiとは書かずに、縦(vertical)や横(beside)や長方形(rectangle)という名前にします。

英語が苦手でも今はGoogle翻訳なども使えるので、変数名を決める時の参考にしています。


今度は三角形を求められるようにコードを改変してみます。
関数の戻り値のところを2で割ると、お馴染みの公式、底辺×高さ÷2ですね。
割り算をしているので、int関数を使って整数値を求めています。

#三角形の面積を計算する関数
def triangle(x,y):
  return int(x*y/2)

#三角形の底辺と高さ
bottom=4
height=3

#三角形の面積を計算する関数を呼び出して戻り値をareaとする
area=triangle(bottom,height)

print('三角形の面積は【'+str(area)+'】cm^2+です。')

実行結果です。


最後に台形を求めるプログラムに変更致します。
台形(trapezoid)は、

(上底+下底)×高さ÷2

で求められます。

上底を5cm、下底を7cm、高さを4cmをします。
コードと実行結果です。

#台形の面積を計算する関数
def trapezoid(x,y,z):
  return int((x+y)*z/2)

#台形の上底と下底と高さ
top_side=5
bottom_side=7
height=4

#台形の面積を計算する関数を呼び出して戻り値をareaとする
area=trapezoid(top_side,bottom_side,height)

print('台形の面積は【'+str(area)+'】cm^2+です。')


関数って最初は面倒でしたが、慣れるととても便利です。
各機能が分かりやすくなって、コードも見やすくなります。

ざっとまとめると、関数がカレー鍋、引数がジャガイモやニンジン、戻り値が出来上がったカレーです。

お疲れ様でした。ブレイクタイムPhotoは、

しながわ花海道に咲いていた、アオイ科のムクゲです。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介