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

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

【Python初心者必見!!】改行の仕方、円周率の使って面積、球体の体積、円周を計算する関数の使い方、二乗3乗などの累乗の計算の仕方、戻り値の小数点以下桁指定

この記事を読むと、今更聞けないPythonの改行の仕方、二乗・3乗などの累乗の計算、円周率を使った計算で円の面積、球の体積(公式も載せました!!)、円周を求める関数を呼び出し、小数点以下を含めた桁指定が習得出来ます。

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

・あの、今更ですけど、Pythonで改行の仕方って聞いても良いですか?
・Pythonでxの二乗、3乗などの累乗ってどうするの?
・そもそも関数ってどうやって呼び出すの?
・関数を呼び出してそこで計算させた戻り値の小数点以下の桁数が多過ぎで、こんなに表示出来ないよ!

とお悩みな方にお役立て頂けたらと思い、記事を書きました。
私も初心者なので、思いっきり初心者目線で書いているので、冗長な所もあるかもしれません。悪しからず。

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

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

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

まず、改行ですが、

print('Hello World 1112 fri\n')

の「\n」(バックスラッシュn)で改行をしています。
Macですと、どうやってバックスラッシュを出すのか私は結構悩みました。やり方は簡単で、Windowsの時だった[Alt]に当たる[option]キーを押しながら、「エンマーク」で表示可能です。


この記事を書いている今日は11月12日の金曜日なのでHelloWorldの後に上記の様に日付と曜日を入力しています。

これは、プログラミング学習を始める前のルーティーンとしてPythonで求めています。
プログラミングは好きで始めたこととはいえ、どうしても気分が乗らないこともあります。そんな時でも「HelloWorldと日付だけ」を表示するプログラムを作ることが私のルーティーンとなっています。

五郎丸さんのルーティーンみたいなものかな。

さて、このプログラムでは、円の面積を求める関数area(引数:半径r)、球の体積を関数globe(引数:半径r)、円周を求めるcircle(引数:半径r)を使っています。

引数って、カレーライスを作るときに入れるニンジンとかジャガイモ、玉ねぎ、カレールーみたいなものかな。

今回は引数rは共通なので、それぞれの関数呼び出しの前に、

r=5

を記述しました。
ここでは半径rを5cmとしています。

それぞれの関数の呼び出しのコードです。
上から、円の面積、球の体積、円周の長さです。

#それぞれの関数の呼び出し
area_ans=(area(r))
globe_ans=(globe(r))
circle_ans=circle(r)

上記の3つの関数を呼び出して、そこで計算した値(戻り値)をそれぞれarea_ans(求めた円の面積)、globe_ans(求めた球の体積)、
circle_ans(求めた円周の長さ)に代入して、小数点以下も含めた桁指定をして、結果を表示します。

円周率を扱うのに、モジュールをインポートしています。

#円周率を扱うのに、インポートしている
import math

円の面積を計算するのに、事情はr**2で半径の二乗を求めています。
**の後を3にする球体や立方体など3次元の体積が求められます。

#円の面積を計算。**で二乗を使っている
def area(r):
    return r**2*math.pi

球体の体積の公式は、

V=\frac{4}{3}πr^{3}

なので、体積を計算する関数のコードは、

#球の体積を計算。**で3乗を使っている
def globe(r):
    return 4/3*math.pi*r**3

となります。

また、円周の長さを求めるコードは

#円周を求める
def circle(r):
    return 2*math.pi*r

となります。

円周率はご存知の通り、3.14159265359…と桁数が膨大なので、戻り値の表示はここでは整数も含めた5桁で表示します。
コードはこの様になります。

#桁数を指定して表示
print('円の面積は'+'{:.5}'.format(area_ans)+'cm ^2です。')
print('球の体積は'+'{:.5}'.format(globe_ans)+'cm ^3です。')
print('円周は、'+'{:.5}'.format(circle_ans)+'cmです。')

戻り値って、出来上がったカレーライスみたいなものかな。

計算結果です。

それでは、ここまで踏まえた全コードを掲載します。

#円周率を扱うのに、インポートしている
import math

#円の面積を計算。**で二乗を使っている
def area(r):
    return r**2*math.pi

#球の体積を計算。**で3乗を使っている
def globe(r):
    return 4/3*math.pi*r**3

#円周を求める
def circle(r):
    return 2*math.pi*r

#半径を指定
r=5

#それぞれの関数の呼び出し
area_ans=(area(r))
globe_ans=(globe(r))
circle_ans=circle(r)

print('Hello World 1112 fri\n')

#桁数を指定して表示
print('円の面積は'+'{:.5}'.format(area_ans)+'cm ^2です。')
print('球の体積は'+'{:.5}'.format(globe_ans)+'cm ^3です。')
print('円周は、'+'{:.5}'.format(circle_ans)+'cmです。')

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

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

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

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

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

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

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の進捗状況(私のロードマップ)

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

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

PythonでBE:FIRST(ビーファースト)の平均年齢を辞書とリストと関数とループを使って求めてみた。

この記事を読むと、AAA(トリプルエー)のラッパーSKY-HI日高 光啓(ひだか みつひろ)さんのオーディションプロジェクトの7人組ボーイズグループ、BE:FIRST(ビーファースト)の平均年齢をPythonで関数を使って求めるプログラミングが理解出来ます。
辞書、リスト、ループ、関数のおさらいと生年月日を扱った処理にも触れています。

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

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

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

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

普段FMラジオでFM TOKYO さんの朝番組、ONE MORNING(ユージさん、吉田明世さんがパーソナリティ)の番組を聴いていて、BE:FIRST7人の早起きの秘訣を聴いていたことから、BE:FIRSTの最年少のリュウヘイ(RYUHEI黒田竜平)がなんと14歳って聴いて、なんて若いのにすごいんだ!!(落ち着いているし、180cmの高身長)と思って、メンバーの平均年齢を調べるためにPythonでプログラミングをして見ました。

簡単にBE:FIRSTについて書くと、公式サイトによると、

SOTA 2001年1月18日 174cm 島雄壮大さん
SHUNTO 2003年9月1日 174cm 久保舜斗さん
MANATO 2001年4月29日 173cm 廣瀬真人さん
RYUHEI 2006年11月7日 180cm 黒田竜平さん
JUNON 1998年5月23日 183cm 池亀樹音さん
RYOKI 1999年4月26日 177cm 三山凌輝さん
LEO 1998年9月8日 179cm 上村礼王さん

の7人です。

デビュー曲
BE:FIRST / Gifted. -Music Video-

メンバーが、ラジオで早起きの秘訣を教えてくれました。
私が特に参考にしたのは、前の日に「何時に起きる」と決めておくという提案です。
どなただっっけ???

7人もいると、なかなか覚えられないので、このような辞書を作りました。

befirst={‘SOTA’:’20010118′,’SUNTO’:’20030901′,’MANATO’:’20010429′,’RYUHEI’:’20061107′,’JUNON’:’19980523′,’ROYOKI’:’19990426′,’LEO’:’19980908′}

ご覧の通り、キーがメンバーのお名前で、値がメンバーの生年月日です。
これをループにして、関数を呼び出してお一人ずつ、今日の日付からの差で年齢を求め、求めた年齢を配列に追加して、その配列から平均年齢を求めるといった流れになります。

こんな感じに実行できました。

では、コードです。

プログラミングやPythonにご興味のある方は、コメントを頼りに読んでみて下さい。

#日付や計算のためにインポートしています。
import datetime
import math

today=int(datetime.datetime.today().strftime("%Y%m%d"))
print("今日は"+str(today)+"です。\n")

#メンバーの年齢を格納するための配列
member=[]

#この関数で計算してるよ! 10000で割っているのは生年月日の桁数からの調整
def calc_age(born):
    age=math.floor((today - int(born)) / 10000)
    return age

#メンバー紹介の辞書
befirst={'SOTA':'20010118','SUNTO':'20030901','MANATO':'20010429','RYUHEI':'20061107','JUNON':'19980523','ROYOKI':'19990426','LEO':'19980908'}
print("メンバーの生年月日の辞書を表示します。")
print(befirst)
print()

#辞書をループを使って、関数に送り込んで、年齢を格納する配列に追加している
for i in befirst:
    age=calc_age(befirst[i])
    member.append(age)

print("メンバーの年齢を算出しました。")
print(member)
print()

ans=sum(member)/float(len(member))
print("平均年齢は"+str(ans)+"歳です。")

    
    

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

しばらく胃腸の病気で療養していて、プログラミングお休みしていたから、すごい時間かかっちゃった・・・。

参考にしたサイト
https://teratail.com/questions/138394

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

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

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

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

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

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

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

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