paiza レベルアップ問題集 「STEP: 3 奇数だけ出力」をPythonとGASで解いてみた

この記事を読むことで、PythonとGASの両方のコードで、ForループとIF文を使った奇数のみの出力の仕方を学べます。Pythonのコードでは、基本的なFor文・IF文のコードの他に、【内包表記】を使ってそれらを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_1, a_2, …, a_N が与えられます。
この N 個の整数のうち、a_1 から順に奇数か偶数か判定し、奇数の場合のみ改行区切りで出力してください。
また、N 個の整数には奇数が少なくとも 1 つ含まれています。

この記事では、入力例1でN=5の5個の数値のリストに「1 2 3 4 5」が与えられて、その中から奇数を出力するという条件で解いて行きます。

入力例1
5
1 2 3 4 5

出力例1
1
3
5

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけ。)

手順として、
1:標準入力でリストの個数を取得
2:標準入力でリストを取得
2:ForループとIFで剰余演算子「%」を使って「%2==1」を奇数と判定して出力

まずは、基本的なForとIFを用いたコードです。

#数値の個数N
N=int(input())

#N個のリストarray
array=list(map(int,input().rstrip().split(' ')))

#ループで奇数の時だけ出力する
for num in array:
    if num%2==1:
        print(num)

次に、上記のForとIFに内包表記を施したコードです。

#数値の個数N
N=int(input())

#N個のリストarray
array=list(map(int,input().rstrip().split(' ')))

#【内包表記】ループで奇数の時だけ出力する
[print(num) for num in array if num%2==1]        

【内包表記】で、ループの部分が1行になっていることが確認出来ました。

Ioの出力結果です。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

黄色いセルの所に奇数を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする

2:スプレッドシートの緑色のセルから配列の個数を取得する


3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する


4:ログで配列が取得できたことを確認


5:スプレッドシードに2次元配列として出力するarray2を宣言


6:ForループとIF文で剰余演算子「%」を使って「%2==1」を奇数と判定して配列array2に追加。


7:スプレッドシート出力前に奇数が格納された二次元配列array2のログ出力で確認する

8:スプレッドシートの黄色いセルに奇数が格納されたarray2を出力する

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:スプレッドシートの緑色のセルから配列の個数を取得する

const N=ss.getRange(1,2).getValue();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array=ss.getRange(4,1,1,N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:スプレッドシードに2次元配列として出力するarray2を宣言

let array2=[]

手順6:ForループとIF文で剰余演算子「%」を使って「%2==1」を奇数と判定して配列array2に追加。

スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が奇数かどうか確認しています。

//ForループとIF文で剰余演算子「%」を使って「%2==1」を奇数と判定して配列array2に追加。
  for(let i=0;i<N;i++){
    if(array[0][i]%2==1){
      array2.push([array[0][i]]);
    }
  }

手順7:スプレッドシート出力前に奇数が格納された二次元配列array2のログ出力で確認する

console.log(array2);

手順8:スプレッドシートの黄色いセルに奇数が格納されたarray2を出力する

ss.getRange(7,1,array2.length).setValues(array2);

(7,1,array2.length)は、スプレッドシートのセルA7からarray2の長さ分(array2.length)のセル範囲を確保して、奇数が格納された配列のarray2を出力するように設定しています。

GASでの全コードはこちらになります。

function loop2no3() {

  //スプレッドシートからアクティブシートをアクセスする
  const ss = SpreadsheetApp.getActiveSheet();

  //スプレッドシートの緑色のセルから配列の個数を取得する
  const N = ss.getRange(1, 2).getValue();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(4, 1, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);

  //スプレッドシードに2次元配列として出力するarray2を宣言
  let array2 = [];


  //ForループとIF文で剰余演算子「%」を使って「%2==1」を奇数と判定して配列array2に追加。
  for (let i = 0; i < N; i++) {
    if (array[0][i] % 2 == 1) {
      array2.push([array[0][i]]);
    }
  }

  //スプレッドシート出力前に奇数が格納された二次元配列array2のログ出力で確認する
  console.log(array2);


  //スプレッドシートの黄色いセルに奇数が格納されたarray2を出力する
  ss.getRange(7, 1, array2.length).setValues(array2);
}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

目白庭園の紅葉

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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

paiza レベルアップ問題集 「STEP: 2 未知数個の文字列の受け取り」をPythonとGASで解いてみた

この記事を読むことで、PythonとGASの両方のコードで、whileとIF文を使った後判定のループの書き方を学べます。

ループ変数iの動きが分かるようにPythonとGASの両方共にトレースのコードも追記致しました。

Whileループでは、ループの前に必ず初期値を設定すること、無限ループにならないように変数のインクリメントをすることを確認しながらコードを書いて行きました。

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

未知数個の文字列の受け取り (paizaランク D 相当)

問題:
複数の文字列が入力されます。文字列の数はわかりません。
EOF が入力されるまで、受け取った文字列を改行区切りで出力してください。

この記事では、入力例1でリストに「abc def ghi jkl EOF」が与えられたという条件で解いて行きます。

入力例1
abc def ghi jkl EOF

出力例1
abc
def
ghi
jkl
EOF

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。
https://paiza.io/ja/projects/new

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
(入力例2をそのままioにコピーしただけ。)

手順として、
1:標準入力でリストを取得
2:whileループの前にループ変数iを0で初期化する
3:whileループでまずはリストの値を出力して、後判定でリストの値が「EOF」だったらループを抜ける
4:iをインクリメントして無限ループを防ぐ

では、ループ内の動きとiの値の変動のトレースをしたコードです。


#長さ不明の文字列を標準入力で受け取る
array=input().rstrip().split(' ')

#whileループの初期値を設定
i=0

print('<<<ループに入ります>>>')
while True:
    #処理前のiの値
    print('処理前のi:'+str(i))
    
    print(i,array[i])
    if array[i]=="EOF":
        break
    #無限ループにならないようにインクリメント
    i+=1

    #処理後のiの値
    print('処理後のi:'+str(i))
    print('--------------------------')

#ループを抜けた後のiの値
print('<<<ループを抜けました>>>')
print('ループを抜けた後のi:'+str(i))

このままですと、この問題の解答に対して冗長な部分があるので、トレースのコードを削除した提出用のコードに書き直しました。


#長さ不明の文字列を標準入力で受け取る
array=input().rstrip().split(' ')

#whileループの初期値を設定
i=0

while True:
    print(array[i])
    if array[i]=="EOF":
        break
    #無限ループにならないようにインクリメント
    i+=1

ioの出力確認をしてコードを提出。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

黄色いセルの所に文字列を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする

2:配列の長さは最終列を取得して求める


3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

4:ログで配列が取得できたことを確認

5:スプレッドシードに2次元配列として出力するarray2を宣言

6:ループに入る前にiを0で初期化

7:whileとIF文で「EOF」までarray2に追加するループを作る

8:スプレッドシート出力前にarray2のログ出力で確認する

9:スプレッドシートの黄色いセルに文字列が格納されたarray2を出力する

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:配列の長さは最終列を取得して求める

const N=ss.getLastColumn();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array = ss.getRange(2, 1, 1, N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:スプレッドシードに2次元配列として出力するarray2を宣言

let array2=[]

手順6:ループに入る前にiを0で初期化

let i=0;


手順7:whileとIF文で「EOF」までarray2に追加するループを作る

※無限ループにならないよう、i=0で初期化した上に、i++でインクリメントしています※

スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が-1以上かどうか確認しています。

トレースコードi=0

トレースコードi=1

トレースコードi=2

トレースコードi=3

トレースコードi=4

//whileとIF文で「EOF」までarray2に追加するループを作る
  while(true){
    console.log(`処理前のiの値:${i}`);
    array2.push([array[0][i]]);
    console.log(`iの値:${i}  array[0][i]の値:${array[0][i]}`);
    
    if(array[0][i]=='EOF'){
      break;
    }
    i++; //無限ループにならないようにインクリメントを忘れない!!
    console.log(`処理後のiの値:${i}`);
    console.log('--------------------------------');
  }

  console.log('<<<ループを抜けました。>>>');
  console.log(`ループを抜けた後のiの値: ${i}`);

手順7:スプレッドシート出力前にarray2のログ出力で確認する

console.log(array2);

手順8:スプレッドシートの黄色いセルにarray2を出力

ss.getRange(5,1,N).setValues(array2);

GASでの全コードはこちらになります。

function loop2no2() {

  //スプレッドシートからアクティブシートをアクセスする
  const ss = SpreadsheetApp.getActiveSheet();

  //配列の長さは最終列を取得して求める
  N = ss.getLastColumn();


  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(2, 1, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);


  //スプレッドシードに2次元配列として出力するarray2を宣言
  let array2 = []

  //ループに入る前にiを0で初期化
  let i = 0;

  console.log('<<<ループに入ります!!>>>');

  //whileとIF文で「EOF」までarray2に追加するループを作る
  while (true) {
    console.log(`処理前のiの値:${i}`);
    array2.push([array[0][i]]);
    console.log(`iの値:${i}  array[0][i]の値:${array[0][i]}`);

    if (array[0][i] == 'EOF') {
      break;
    }
    i++; //無限ループにならないようにインクリメントを忘れない!!
    console.log(`処理後のiの値:${i}`);
    console.log('--------------------------------');
  }

  console.log('<<<ループを抜けました。>>>');
  console.log(`ループを抜けた後のiの値: ${i}`);

  //スプレッドシート出力前にarray2のログ出力で確認する
  console.log(array2);


  //スプレッドシートの黄色いセルに文字列が格納されたarray2を出力する
  ss.getRange(5, 1, N).setValues(array2);
}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

お台場の観覧車

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

←前の問題へ          次の問題へ(準備中)→

paiza レベルアップ問題集 「STEP: 1 未知数個の数の受け取り」をPythonとGASで解いてみた

この記事を読むことで、PythonでのForループの基本的な書き方及び、内包表記によるループの書き方とGASのwhileを使ったループの書き方を学べます。

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

未知数個の数の受け取り (paizaランク D 相当)

問題:
長さがわからない数列 a が入力されます。
-1 が入力されるまで、受け取った数を改行区切りで出力してください。

この記事では、入力例2でリストに「10 2 5 13 5 20 1 5 6 -1」が与えられたという条件で解いて行きます。

入力例2
10 2 5 13 5 20 1 5 6 -1

出力例2
10
2
5
13
5
20
1
5
6
-1

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
(入力例2をそのままioにコピーしただけ。)

手順として、
1:標準入力でリストを取得
2:len関数でリストの長さを取得して変数Nに格納
3:ループで長さN分ループを回して出力

では、コードを見て行きます。

#未知数個の配列を受け取る
array=list(map(int,input().rstrip().split()))

#配列の長さ
N=len(array)


#ループで取得
for i in range(N):
    print(array[i])

ioの出力確認をしてコードを提出。

次は、ループの所を内包表記で書いたコードです。

#未知数個の配列を受け取る
array=list(map(int,input().rstrip().split()))

#配列の長さ
N=len(array)

#ループで取得
[print(array[i]) for i in range(N)]

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

黄色いセルの所に配列を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする

2:配列の長さは最終列を取得して求める

3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

4:ログで配列が取得できたことを確認

5:スプレッドシードに2次元配列として出力するarray2を宣言

6:whileループで配列の要素が「-1」以上ならarray2に追加する

7:スプレッドシート出力前にarray2のログ出力で確認する

8:スプレッドシートの黄色いセルにarray2を出力

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:配列の長さはgetLastColumnメソッドを使って最終列を取得して求める

const N=ss.getLastColumn();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array = ss.getRange(2, 1, 1, N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:スプレッドシードに2次元配列として出力するarray2を宣言

let array2=[]

手順6:whileループで配列の要素が「-1」以上ならarray2に追加する

※無限ループにならないよう、i=0で初期化した上に、i++でインクリメントしています※

問題文の条件に
すべてのテストケースにおいて、以下の条件をみたします。
・ 0 ≦ a_i ≦ 100 (1 ≦ i ≦ N)
とありますので、whileでi>=-1の時にループを繰り返す処理を施しました。

スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が-1以上かどうか確認しています。

  //whileループで配列の要素が「-1」以上ならarray2に追加する
  let i=0
  while(array[0][i]>=-1){
    array2.push([array[0][i]]);
    i++;
  }

手順7:スプレッドシート出力前にarray2のログ出力で確認する

console.log(array2);

手順8:スプレッドシートの黄色いセルにarray2を出力

ss.getRange(5,1,N).setValues(array2);

GASでの全コードはこちらになります。

function loop2no1() {
  const ss = SpreadsheetApp.getActiveSheet();

  //配列の長さは最終列を取得して求める
  const N = ss.getLastColumn();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(2, 1, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);

  //スプレッドシードに2次元配列として出力するarray2を宣言
  let array2 = []

  //whileループで配列の要素が「-1」以上ならarray2に追加する
  let i = 0
  while (array[0][i] >= -1) {
    array2.push([array[0][i]]);
    i++;
  }

  //スプレッドシート出力前にarray2のログ出力で確認する
  console.log(array2);

  //スプレッドシートの黄色いセルにarray2を出力
  ss.getRange(5, 1, N).setValues(array2);

}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

お台場のガンダム
燃え上がっています。

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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

【Pythonクラス爆速理解!!】「NiziU」のメンバーカラーでクラスを学習

この記事は、Pythonでクラスの学習中の方で、9人組ダンスボーカルのガールズグループ「NiziU」を知っている(聞いたことがある〜大ファン(ファンの愛称がWithUという様です。))の方を対象としています。
また、内包表記についても触れています。

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

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

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

クラス:設計図
インスタンス:クラスという設計図から作られた具体的な製品

に例えられることが多いです。

そこで、ここでは、

設計図であるクラスNiziUは、「名前」・「担当カラー」を持つ設計図である。
この設計図から作られた具体的なメンバーの、

「名前:MAKO , 担当カラー:オレンジ」、
「名前:RIO , 担当カラー:スカイブルー」、
「名前:MAYA , 担当カラー:パープル」、
「名前:RIKU , 担当カラー:イエロー」、
「名前:AYAKA , 担当カラー:ホワイト」、
「名前:MAYUKA , 担当カラー:ライトグリーン」、
「名前:RIMA , 担当カラー:レッド」、
「名前:MIIHI , 担当カラー:ピンク」、
「名前:NINA , 担当カラー:ディープブルー」

といった、クラスから作られた、「具体的なメンバーと担当カラー」をインスタンスとします。

まず、クラスのコードの説明をします。
initは、最初に自動的に呼ばれるメソッド(関数のこと。クラスでは関数をメソッドと言います。)で、引数の「self」とは、MAKOさん、RIOさん、MAYAさん、RIKUさん、AYAKAさん、MAYUKAさん、RIMAさん、MIIHIさん、NINAさんといった、具体的なメンバー自身のことです。

initが呼ばれた後に、profile (プロフィール)というメソッドが呼び出され、ここで各メンバーの名前・担当カラーの紹介が出力されます。

class NiziU:
    def __init__(self,name,color):
        self.name=name
        self.color=color

    def profile(self):
        print('名前:【'+self.name+('】担当カラー【'+self.color+'】です。'))

次に、各メンバーを格納するリストと、クラスNiziUからインスタンス化(実例化)した作られたオブジェクト(MAKOさん、RIOさん、MAYAさん、RIKUさん、AYAKAさん、MAYUKAさん、RIMAさん、MIIHIさん、NINAさん)をリストにappendを使って追加するコードです。
ここでは、memberというリストに追加しています

#メンバーリストの定義とインスタンス化
member=[]
member.append(NiziU('MAKO  ','オレンジ     '))
member.append(NiziU('RIO   ','スカイブルー  '))
member.append(NiziU('MAYA  ','パープル     '))
member.append(NiziU('RIKU  ','イエロー     '))
member.append(NiziU('AYAKA ','ホワイト     '))
member.append(NiziU('MAYUKA','ライトグリーン'))
member.append(NiziU('RIMA  ','レッド       '))
member.append(NiziU('MIIHI ','ピンク       '))
member.append(NiziU('NINA  ','ディープブルー'))

リストをループで取り出して、プロフィールメソッドを呼び出すコードです。

#基本的なループでメソッドを呼び出す
for oshi in member:
    oshi.profile()

この部分を内包表記で書くと、

#内包表記を使用
[oshi.profile() for oshi in member]

このように1行で書けます。

出力結果とここまでのコードです。

class NiziU:
    def __init__(self,name,color):
        self.name=name
        self.color=color

    def profile(self):
        print('名前:【'+self.name+('】担当カラー【'+self.color+'】です。'))

#メンバーリストの定義とインスタンス化
member=[]
member.append(NiziU('MAKO  ','オレンジ     '))
member.append(NiziU('RIO   ','スカイブルー  '))
member.append(NiziU('MAYA  ','パープル     '))
member.append(NiziU('RIKU  ','イエロー     '))
member.append(NiziU('AYAKA ','ホワイト     '))
member.append(NiziU('MAYUKA','ライトグリーン'))
member.append(NiziU('RIMA  ','レッド       '))
member.append(NiziU('MIIHI ','ピンク       '))
member.append(NiziU('NINA  ','ディープブルー'))

#基本的なループでメソッドを呼び出す
for oshi in member:
    oshi.profile()

#内包表記を使用
[oshi.profile() for oshi in member]

最後までお読み頂きありがとにゃん(=^x^=)
お疲れ様でした。では、NiziUの歌で癒されてちゃって下さい!!

かわいいですね。癒されます。

クラスは中々習得が難しいので、練習の為に同様なインスタンス化を行いました。
関連記事:

【Pythonクラス爆速理解!!】昭和ギャグから学ぶクラスとインスタンス「月曜日はウンジャラゲ♪」

【Pythonクラス爆速理解!!】「BE:FIRST」のメンバーのプロフィール(名前・出身地・身長)でクラスを学習

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

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

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

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

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

【Pythonクラス爆速理解!!】「BE:FIRST」のメンバーのプロフィール(名前・出身地・身長)でクラスを学習

この記事は、Pythonでクラスの学習中の方で、7人組ダンスボーカルのボーイズグループ「BE:FIRST」を知っている(聞いたことがある〜大ファンまでの)方を対象としています。
また、ループの内包表記についても触れています。

クラス・・・設計図
オブジェクト・・・クラスという設計図から作った具体的な製品

に例えられることが多いです。
そこで、ここでは、

BE:FIRSTという設計図から、「SOTA(ソウタ)・SHUNTO(シュント)・MANATO(マナト)・RYUHEI(リュウヘイ)・JUNON(ジュノン)・RYOKI(リョウキ)・LEO(レオ)」といった具体的なメンバーであるオブジェクトを作成するという考え方でクラスについて学んでいきます。

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

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

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

まず、クラスのコードの説明をします。
initは、最初に自動的に呼ばれるメソッド(関数)で、引数のselfとは、SOTAさん、SHUNTOさん、MANATOさん、RYUHEIさん、JUNONさん、RYOKIさん、LEOさんといった、具体的なメンバー自身のことです。

initが呼ばれた後に、profile (プロフィール)というメソッドが呼び出され、ここで各メンバーの名前・出身地・身長の紹介が出力されます。
profileメソッドの身長は数値なのでstrで括っています。
また、結果が見やすいように【 】で括っています。

class Befirst:
    def __init__(self,name,place,height):
        self.name=name
        self.place=place
        self.height=height

    def profile(self):
        print("【"+self.name+"】さんは【"+self.place+"】出身で身長は【"+str(self.height)+"】cmです。")

次に、各メンバーを格納するリストと、クラスBE:FIRSTからインスタンス化(実例化)して作られたオブジェクト(SOTAさん、SHUNTOさん、MANATOさん、RYUHEIさん、JUNONさん、RYOKIさん、LEOさん)をリストにappendを使って追加するコードです。
ここでは、memberというリストに追加しています

#メンバーのリストを作成
member=[]

#インスタンス化して作ったオブジェクトをリストに追加
member.append(Befirst("池亀樹音","東京都 ",183))
member.append(Befirst("上村礼王","埼玉県 ",179))
member.append(Befirst("三山凌輝","愛知県 ",177))
member.append(Befirst("島雄壮大","神奈川県",174))
member.append(Befirst("廣瀬真人","福岡県 ",173))
member.append(Befirst("久保舜斗","愛知県 ",174))
member.append(Befirst("黒田竜平","愛知県 ",180))

リストをループで取り出して、プロフィールメソッドを呼び出すコードです。

#ループでプロフィールメソッドを呼び出す
for man in member:
    man.profile()

この部分を内包表記で書くと、

#ループで同様の処理を内包表記で書く処理
[man.profile() for man in member]

このように1行で書けます。

出力結果とここまでの全てのコードです。

class Befirst:
    def __init__(self,name,place,height):
        self.name=name
        self.place=place
        self.height=height

    def profile(self):
        print("【"+self.name+"】さんは【"+self.place+"】出身で身長は【"+str(self.height)+"】cmです。")


#メンバーのリストを作成
member=[]

#インスタンス化して作ったオブジェクトをリストに追加
member.append(Befirst("池亀樹音","東京都 ",183))
member.append(Befirst("上村礼王","埼玉県 ",179))
member.append(Befirst("三山凌輝","愛知県 ",177))
member.append(Befirst("島雄壮大","神奈川県",174))
member.append(Befirst("廣瀬真人","福岡県 ",173))
member.append(Befirst("久保舜斗","愛知県 ",174))
member.append(Befirst("黒田竜平","愛知県 ",180))

#ループでプロフィールメソッドを呼び出す
for man in member:
    man.profile()

#ループで同様の処理を内包表記で書く処理
[man.profile() for man in member]

(ループはシンプルなコード、または内包表記のどちらかをコメントアウトしないと、2回出力されてしまいます。)

関連記事:【クラス爆速理解!!】昭和ギャグから学ぶクラスとインスタンス「月曜日はウンジャラゲ♪」
こちらでは、クラスの基本的な内容を「昭和な方向け」に書いております。

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

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

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

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

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

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

paiza レベルアップ問題集 「FINAL問題 数列の中に何個ある?」をPythonとGASで解いてみた

この記事を読むことで、PythonでのIF文・Forループの基本的な書き方と、ループ内の変数の値がどの様に変化しているのかを逐一確認出来るトレースのコードの書き方、リスト内の指定の数を数えるcount関数の使い方を学べます。

このコーナーでは、学習コンテンツ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) が与えられます。
この数列の中に 1 が何個あるか出力してください。

この記事では、入力例3でNにリスト長さが「6」、リストに「8 1 3 8 1 3」が与えられたという条件で解いて行きます。

入力例3
6
8 1 3 8 1 3

出力例3
2

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

手順として、
1:標準入力でNを取得
2:標準入力でリストを取得
3:変数ansに配列の中に「1」が出現した回数を0で初期化する
4:ループで配列の中にある「1」を見つけたらansにインクリメント(出現回数 ans+=1)する
5:最終的な「1」の出現回数を出力する。

手順3ですが、配列の中の「1」の出現数を数えるので、最初の出現回数は0回です。
ansという変数に出現回数を格納しているので、まずansを0で初期化します。
ループで配列を探索して「1」が見つかったら、ansをインクリメントします。

では、コードを見て行きます。
リストの要素とその中身をトレースしたコードと実行結果です。


#リストの長さNを取得
N=int(input())


#リストを取得
array=list(map(int,input().rstrip().split(' ')))


#「1」の出現回数ansを0で初期化する
ans=0


#ループでリストを探索して「1」を見つけたらansをインクリメントする
for num in array:
    print('分岐前:現在の「1」の数は【'+str(ans)+'】です。')
    print('リストの要素numは【'+str(num)+'】です。')
    if num==1:
        ans+=1
        print('<<<「1」を見つけたぞ!!!!!>>>')
    print('分岐後:現在の「1」の数は【'+str(ans)+'】です。')
    print('------------------------------')

print('このリストの最終的な「1」の数は【'+str(ans)+'】です。')

このトレースコードについて深く知りたい方の多くは基本情報技術者試験を目指されている方か、既にお持ちの方、または講師の方かもしれませんので、宜しければ当ブログの基本情報技術者試験トップページをご覧下さい。アルゴリズムや午後問題の勉強の仕方やオススメ参考書について、かなり詳しく書いています。

では、このコードの話に戻します。
このままでは、paizaの問題文の「リストの中に1が何個出現したか」に対して余分なコードがあるので、コメントアウトします。
最後にこの問題の解答である出力結果のprint文を追記しました。


#リストの長さNを取得
N=int(input())


#リストを取得
array=list(map(int,input().rstrip().split(' ')))


#「1」の出現回数ansを0で初期化する
ans=0


#ループでリストを探索して「1」を見つけたらansをインクリメントする
for num in array:
    #print('分岐前:現在の「1」の数は【'+str(ans)+'】です。')
    #print('リストの要素numは【'+str(num)+'】です。')
    if num==1:
        ans+=1
        #print('<<<「1」を見つけたぞ!!!!!>>>')
    #print('分岐後:現在の「1」の数は【'+str(ans)+'】です。')
    #print('------------------------------')

#print('このリストの最終的な「1」の数は【'+str(ans)+'】です。')
print(ans)

ioの出力確認をしてコードを提出。

これで無事正解しました。

Pythonには指定の数を数える「count関数」があるので、このようなシンプルなコードでも正解します。

リストarray内に「1」が何個あるのか数えるcount関数の書き方とその場合のコード

print(array.count(1))

#リストの長さNを取得
N=int(input())


#リストを取得
array=list(map(int,input().rstrip().split(' ')))


#count関数でリスト内の「1」の数を数える
print(array.count(1))

これですと、ループを使わなくても解答出来ますね。
更にカウントに使ったansの宣言も不要です。
ただ、一応この問題は「ループの練習」なので、冗長でしたが先ほどのコードも掲載しました。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

黄色いセルの所に配列の最大値を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする

2:緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)

3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

4:ログで配列が取得できたことを確認

5:1の出現回数を数えるansを0で初期化する

6:ループとIFで配列の要素が「1」かどうかをトレースしながら探索してログ出力する
もしも上の配列の中から「1」が見つかったらansをインクリメント(加算)する

7:リスト内の最終的なansをログで出力して確認

8:スプレッドシート格納用に配列ans2を宣言

9:ans2にansを二次元配列になるように格納

10:スプレッドシート出力前にans2をログ出力して確認

11:スプレッドシートの黄色いセルにans2を出力

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)

const N=ss.getRange(1,2).getValue();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array = ss.getRange(2, 2, 1, N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:1の出現回数を数えるansを0で初期化する

let ans = 0;

手順6:ループとIFで配列の要素が「1」かどうかをトレースしながら探索してログ出力する。もしも上の配列の中から「1」が見つかったらansをインクリメント(加算)する。

  for (let i = 0; i < N; i++) {
    console.log(`分岐前:現在の「1」の数は【${ans}】です。`);
    console.log(`現在の配列array[0][${i}]の要素は【${array[0][i]}】です。`);
    if (array[0][i] == 1) {
      console.log('<<<「1」を見つけたぞ!!!!!>>>');
      ans += 1;
    }
    console.log(`分岐後:現在の「1」の数は【${ans}】です。`);
    console.log('--------------------------------------');
  }

スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の0行目の所をループで「中身が1かどうか確認」しています。

もしもarray[0][i]が「1」と等しかったら、変数ansをインクリメント(1つ加算)します。その後conole.logで、分岐前・現在の配列の添字と要素・分岐後をログで出力しています。
文章と数値を出力同時に出力するには「`」を使います。
これは、[Shift]+[@]です。
数値が入る所に${}と記述しています。

※二次元配列になっていることに注意!!
array=[[8,1,3,8,1,3]]に対して、array[0][I]のトレースをして行きます。

・i=0 array[0][0]=[[8]]の時のトレース

・i=1 array[0][1]=[[1]]の時のトレース

・i=2 array[0][2]=[[3]]の時のトレース

・i=3 array[0][3]=[[8]]の時のトレース

・i=4 array[0][4]=[[1]]の時のトレース

・i=5 array[0][5]=[[3]]の時のトレース

手順7:リスト内の最終的なansをログで出力して確認

console.log(ans);

手順8:スプレッドシート格納用に配列ans2を宣言

let ans2 = [];

手順9:ans2にansを二次元配列になるように格納
※スプレッドシートはタテとヨコの二次元配列で格納しているので、格納する前に二次元配列にします※

ans2.push([ans]);

手順10:スプレッドシート出力前にans2をログ出力して確認

console.log(ans2);

手順11:スプレッドシートの黄色いセルにans2を出力

ss.getRange(4, 2).setValues(ans2);

GASでの全コードはこちらになります。

function loop20() {

  //スプレッドシートからアクティブシートをアクセスする
  const ss = SpreadsheetApp.getActiveSheet();

  //緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)
  const N = ss.getRange(1, 2).getValue();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(2, 2, 1, N).getValues();

  //ログで配列が取得できたことを確認
  console.log(array);

  //1の出現回数を数えるansを0で初期化する
  let ans = 0;


  //ループとIFで配列の要素が「1」かどうかをトレースしながら探索してログ出力する
  //もしも上の配列の中から「1」が見つかったらansをインクリメント(加算)する

  for (let i = 0; i < N; i++) {
    console.log(`分岐前:現在の「1」の数は【${ans}】です。`);
    console.log(`現在の配列array[0][${i}]の要素は【${array[0][i]}】です。`);
    if (array[0][i] == 1) {
      console.log('<<<「1」を見つけたぞ!!!!!>>>');
      ans += 1;
    }
    console.log(`分岐後:現在の「1」の数は【${ans}】です。`);
    console.log('--------------------------------------');
  }

  //リスト内の最終的なansをログで出力して確認
  console.log(ans);

  //スプレッドシート格納用に配列ans2を宣言
  let ans2 = [];


  //ans2にansを二次元配列になるように格納
  ans2.push([ans]);


  //スプレッドシート出力前にans2をログ出力して確認
  console.log(ans2);

  //スプレッドシートの黄色いセルにans2を出力
  ss.getRange(4, 2).setValues(ans2);


}

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

お疲れ様でした、ブレイクタイムフォトはこちらになります。

レインボーブリッジ

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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

paiza レベルアップ問題集 「STEP: 3 数列の何番目にある?」をPythonとGASで解いてみた

この記事を読むことで、PythonにおけるIF文・Forループの基本的な書き方と、リスト(配列)の「指定の文字」が「どこに格納されているのか」を、トレースしながら該当の添字を調べることが出来ます。

このコーナーでは、学習コンテンツ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) が与えられます。
この数列の何番目に 1 があるか出力してください。
数列の 1 つ目の要素を 1 番目とし、数列には必ず 1 がひとつだけ含まれることとします。

この記事では、入力例3でNにリスト長さが「6」、リストに「8 2 3 8 1 3」が与えられたという条件で解いて行きます。

入力例3
6
8 2 3 8 1 3

出力例3
5

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

手順として、
1:標準入力でNを取得
2:標準入力でリストを取得
3:変数numに「1」が含まれている所の要素番号にNを仮に設定(リストの要素番号はN-1までなので。)
4:ループで「1」が含まれている位置を探索する
5:先頭の要素が0なので、1を加えて出力する

手順3ですが、要素番号はこの例(N=6)の場合、0,1,2,3,4,5です。
つまり、求める要素番号が6になることは問題文の設定上、絶対にありません。
なので、numをNで初期化しています。

では、コードを見て行きます。
リストの要素とその中身をトレースしたコードと実行結果です。

#標準入力でNを取得
N=int(input())


#標準入力でリストを取得
array=list(map(int,input().rstrip().split(' ')))

#変数numに「1」が含まれている所の要素番号にNを仮に設定(リストの要素番号はN-1までなので。)
num=N

#リストを出力
print(array)

#ループで「1」が含まれている位置を探索する
for i in range(N):
    
    #ループでの探索のトレース
    print('要素'+str(i)+'は「'+str(array[i])+'」です。')
    
    if array[i]==1:
        num=i
        print('見つかった!!インデックス'+str(i)+'は「'+str(i+1)+'」番目')

#先頭の要素が0なので、1を加えて出力する
print(num+1)

このトレースコードについて深く知りたい方の多くは基本情報技術者試験を目指されている方か、既にお持ちの方、または講師の方かもしれませんので、宜しければ当ブログの基本情報技術者試験トップページをご覧下さい。アルゴリズムや午後問題の勉強の仕方やオススメ参考書について、かなり詳しく書いています。

では、このコードの話に戻します。
このままでは、paizaの問題の「1がリストの何番目にあるのか」に対して余分なコードがあるので、コメントアウトします。


#標準入力でNを取得
N=int(input())


#標準入力でリストを取得
array=list(map(int,input().rstrip().split(' ')))

#変数numに「1」が含まれている所の要素番号にNを仮に設定(リストの要素番号はN-1まで)
num=N

#リストを出力
#print(array)

#ループで「1」が含まれている位置を探索する
for i in range(N):
    
    #ループでの探索のトレース
    #print('要素'+str(i)+'は「'+str(array[i])+'」です。')
    
    if array[i]==1:
        num=i
        #print('見つかった!!インデックス'+str(i)+'は「'+str(i+1)+'」番目')

#先頭の要素が0なので、1を加えて出力する
print(num+1)        

ioの出力確認をしてコードを提出。

これで無事正解しました。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。

まず、スプレッドシートにこの様に配置しました。

黄色いセルの所に配列の最大値を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする

2:緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)

3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

4:ログで配列を取得できたことを確認

5:上の配列の中から「1」がある位置を探索して見つかった場所をnumに代入する
配列の添字が0,1,2,…N-1までなので、numをあり得ないNで初期化

6:ループとIFで「1」の位置をトレースしながら探索

7:numをログで出力して確認

8:配列の添字は0番目から始まるので、numに1を加える

9:numがインクリメント(加算)出来たことをログ出力して確認

10:スプレッドシート格納用に配列num2を宣言

11:num2にnumを二次元配列になるように格納

12:スプレッドシート出力前にnum2を確認

13:スプレッドシートの黄色いセルにnum2を出力

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)

const N=ss.getRange(1,2).getValue();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array = ss.getRange(2, 2, 1, N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:上の配列の中から「1」がある位置を探索して見つかった場所をnumに代入する
配列の添字が0,1,2,…N-1までなので、numをあり得ないNで初期化
この例ですと、N=6なので、このリストの添字は「0,1,2,3,4,5」です。
なので、添字が6になることはあり得ません。

let num=N;

手順6:ループとIFで「1」の位置をトレースしながら探索

//ループとIFで「1」の位置をトレースしながら探索
  for(let i=0;i<N;i++){
    if(array[0][i]==1){
      num=i
      console.log(`見つかった!!インデックス+「${i}」+は【${i+1}】番目!!!`);
    }
    console.log(`要素${i}は、「${array[0][i]}」です。`);
  }

スプレッドシートでは2次元配列で格納されているので、array[0][i]と記述して、配列の1行目をループで配列の中身が1かどうか確認しています。

もしもarray[0][i]が「1」と等しかったら、変数numに[i]を格納しています。
その後conole.logで、「見つかった!!インデックス+「${i}」+は【${i+1}】番目!!!」と表示しています。
「`」は、[Shift]+[@]です。
数値が入る所に${}と記述しています。

手順7:numをログで出力して確認

console.log(num);

手順8:配列の要素は0番目から始まるので、numに1を加える

num++;

手順9:numがインクリメント(加算)出来たことをログ出力して確認

console.log(num);

手順10:スプレッドシート格納用に配列num2を宣言

let num2=[];

スプレッドシートはタテとヨコの二次元配列で格納しているので、格納する前に二次元配列にします。

手順11:num2にnumを二次元配列になるように格納

num2.push([num]);

手順12:スプレッドシート出力前にnum2を確認

console.log(num2);

手順13:スプレッドシートの黄色いセルにnum2を出力

ss.getRange(4,2).setValue(num2);

スプレッドシートの実行結果です。

GASでの全コードはこちらになります。

function loop19(){
  
  //スプレッドシートからアクティブシートをアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)
  const N=ss.getRange(1,2).getValue();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array=ss.getRange(2,2,1,N).getValues();

  //ログで配列を取得できたことを確認
  console.log(array);
  

  //上の配列の中から「1」がある位置を探索して見つかった場所をnumに代入する
  //配列の添字が0,1,2,…N-1までなので、numをあり得ないNで初期化
  let num=N;

  //ループとIFで「1」の位置をトレースしながら探索
  for(let i=0;i<N;i++){
    if(array[0][i]==1){
      num=i
      console.log(`見つかった!!インデックス+「${i}」+は【${i+1}】番目!!!`);
    }
    console.log(`要素${i}は、「${array[0][i]}」です。`);
  }

  //numをログで出力して確認
  console.log(num);

  //配列の添字は0番目から始まるので、numに1を加える
  num++;

  //numがインクリメント(加算)出来たことをログ出力して確認
  console.log(num);

  //スプレッドシート格納用に配列num2を宣言
  let num2=[];

  //num2にnumを二次元配列になるように格納
  num2.push([num]);

  //スプレッドシート出力前にnum2を確認
  console.log(num2);

  //スプレッドシートの黄色いセルにnum2を出力
  ss.getRange(4,2).setValue(num2);
}

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

お疲れ様でした、ブレイクタイムフォトはこちらになります。

恵比寿ガーデンプレイス「俺のBakery&Cafe」

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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

paiza レベルアップ問題集 「STEP: 2 数列の最小値」をPythonとGASで解いてみた

この記事を読むと、PythonでのIF文・Forループの基本的な書き方と、min関数をprint文の中で使って最小値を求める方法を学べます。

このコーナーでは、学習コンテンツ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) が与えられます。
この数列の最小値を出力してください。

この記事では、入力例3でNにリスト長さが「6」、リストに「8 2 3 8 3 3」が与えられたという条件で解いて行きます。

入力例3
6
8 2 3 8 3 3

出力例3
2

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

手順として、
1:標準入力でNを取得
2:標準入力でリストを取得
3:仮の最小値ansを999で初期化して宣言
4:ループとIFで最大値を比較しながら代入
5:ループを回しながら【現在の最小値】のトレースをして出力
6:最小値ansを出力

まずは、仮の最小値ansを999にして、ループで比較しながら解いていく基本的なコードを掲載します。
トレースしやすいように、ループを回しながら現在の最小値を出力しています。
最終的な最小値が最後に出力されています。

最小値を入れる変数ansを仮に999で初期化しているのは、この問題には下記の条件があるからです。

条件
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ 0 ≦ a_i ≦ 100 (1 ≦ i ≦ N)
つまり、999ではなくても101以上の数だったらOKです。

では、コードを見て行きます。

#標準入力でNを取得
N=int(input())

#標準入力でリストを取得
array=list(map(int,input().rstrip().split(' ')))

#仮の最小値ansを999で初期化して宣言
ans=999

#ループを回しながら【現在の最小値】のトレースをして出力
for num in array:
    if num<ans:
        ans=num
    print('現在の最小値は【'+str(ans)+'】です。')

#最小値ansを出力
print(ans)

実行するとこのように値が変わって出力されていることが確認できます。

このトレースコードについて深く知りたい方の多くは基本情報技術者試験を目指されている方か、既にお持ちの方、または講師の方かもしれませんので、宜しければ当ブログの基本情報技術者試験トップページをご覧下さい。アルゴリズムや午後問題の勉強の仕方やオススメ参考書について、かなり詳しく書いています。

では、このコードの話に戻します。
このままでは、paizaの問題の「最小値を出力」に対して余分なコードがあるので、コメントアウトします。


#標準入力でNを取得
N=int(input())

#標準入力でリストを取得
array=list(map(int,input().rstrip().split(' ')))

#仮の最小値ansを999で初期化して宣言
ans=999

#ループを回しながら【現在の最小値】のトレースをして出力
for num in array:
    if num<ans:
        ans=num
    #【ここをコメントアウト】print('現在の最小値は【'+str(ans)+'】です。')

#最小値ansを出力
print(ans)

ioの出力確認をしてコードを提出。

これで無事正解しました。

次に別解として、min関数を使って最大値を求めるコードを掲載します。

#標準入力でNを取得
N=int(input())

#標準入力でリストを取得
array=list(map(int,input().rstrip().split(' ')))

#【min関数を使って】最小値ansを出力
print(min(array))

こんな便利な関数があるんだったら、最初からこれ使えって感じですが、自分のトレースの勉強のために冗長でも行いました。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

黄色いセルの所に配列の最小値を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)
3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する
4:ログで配列を取得できたことを確認
5:最小値に仮の値ansを999で初期化して定義
6:スプレッドシートに二次元配列として格納する配列ans2を定義
7:ループとIFで最小値を比較しながら代入してそのログをトレースしながら出力
8:ansを二次元配列としてans2に追加する
9:ログでans2を出力して確認
10:スプレッドシートの黄色いセルに最小値を出力

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)

const N=ss.getRange(1,2).getValue();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array = ss.getRange(2, 2, 1, N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:最小値に仮の値ansを999で初期化して定義

let ans = 999;

手順6:スプレッドシートに二次元配列として格納する配列ans2を定義

const ans2 = [];

手順7:ループとIFで最小値を比較しながら代入してそのログをトレースしながら出力

//ループとIFで最小値を比較しながら代入してそのログをトレースしながら出力
  for (let i = 0; i < N; i++) {
    if (array[0][i] < ans) {
      ans = array[0][i]
    }
    console.log(`現在の最小値は【${ans}】です。`);
  }

手順8:ansを二次元配列としてans2に追加する

ans2.push([ans]);

手順9:ログでans2を出力して確認

console.log(ans2);

手順10:スプレッドシートの黄色いセルに最小値を出力

ss.getRange(4, 2).setValue(ans2);

スプレッドシートの実行結果です。

GASでの全コードはこちらになります。

function loop18() {

  //スプレッドシートからアクティブシートをアクセスする
  const ss = SpreadsheetApp.getActiveSheet();

  //緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=6)
  const N = ss.getRange(1, 2).getValue();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  let array = ss.getRange(2, 2, 1, N).getValues();

  //ログで配列を取得できたことを確認
  console.log(array);

  //最小値に仮の値ansを999で初期化して定義
  let ans = 999;

  //スプレッドシートに二次元配列として格納する配列ans2を定義
  let ans2 = [];

  //ループとIFで最小値を比較しながら代入してそのログをトレースしながら出力
  for (let i = 0; i < N; i++) {
    if (array[0][i] < ans) {
      ans = array[0][i]
    }
    console.log(`現在の最小値は【${ans}】です。`);
  }

  //ansを二次元配列としてans2に追加する
  ans2.push([ans]);

  //ログでans2を出力して確認
  console.log(ans2);

  //スプレッドシートの黄色いセルに最小値を出力
  ss.getRange(4, 2).setValue(ans2);

}

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

お疲れ様でした。
ブレイクタイムフォトはこちらになります。

目白庭園の紅葉です。

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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

paiza レベルアップ問題集 「STEP: 1 数列の最大値」をPythonとGASで解いてみた

この記事を読むと、PythonでのIF文・Forループの基本的な書き方と、max関数をprint文の中で使って最大値を求める方法を学べます。
また、ループの中で値がどう変化していくのか、トレースの練習になるコードもPython、GASの両方で掲載しています。

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

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

数列の最大値 (paizaランク D 相当)

問題:長さ N の数列 a (a_1, a_2, …, a_N) が与えられます。
この数列の最大値を出力してください。

この記事では、入力例1でNにリスト長さが5、リストに「1 2 3 4 5」にが与えられたという条件で解いて行きます。

入力例1
5
1 2 3 4 5

出力例1
5

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。

手順として、
1:標準入力でNを取得
2:標準入力でリストを取得
3:仮の最大値ansを0で初期化して宣言
4:ループとIFで最大値を比較しながら代入
5:ループを回しながら【現在の最大値】を出力してトレース
6:最大値ansを出力

まずは、仮の最大値ansを0で初期化して、ループで比較しながら解いていく基本的なコードを掲載します。
トレースしやすいように、ループを回しながら現在の最大値を出力しています。
最終的な最大値が最後に出力されています。

#リストの要素数
N=int(input())

#リストを取得
array=list(map(int,input().rstrip().split(' ')))

#仮の最大値ansを宣言して0で初期化
ans=0

#Forループとifで最大値を更新しながら取得する
for num in array:
    if num>ans:
        ans=num
    #トレース文
    print('現在の最大値は【'+str(ans)+'】です。')

print(ans) 

このトレースコードについて深く知りたい方の多くは基本情報技術者試験を目指されている方か、既にお持ちの方、または講師の方かもしれませんので、宜しければ当ブログの基本情報技術者試験トップページをご覧下さい。アルゴリズムや午後問題の勉強の仕方やオススメ参考書について、かなり詳しく書いています。

では、このコードの話に戻します。
このままでは、paizaの問題の「最大値を出力」に対して余分なコードがあるので、コメントアウトします。

#リストの要素数
N=int(input())

#リストを取得
array=list(map(int,input().rstrip().split(' ')))

#仮の最大値ansを宣言して0で初期化
ans=0

#Forループとifで最大値を更新しながら取得する
for num in array:
    if num>ans:
        ans=num
    #【ここをコメントアウト】print('現在の最大値は【'+str(ans)+'】です。')

print(ans)    

ioの出力確認をしてコードを提出。

これで無事正解しました。

次に別解として、max関数を使って最大値を求めるコードを掲載します。

#リストの要素数
N=int(input())

#リストを取得
array=list(map(int,input().rstrip().split(' ')))

#【max関数】を使って出力
print(max(array))

こんな便利な関数があるんだったら、最初からこれ使えって感じですが、自分のトレースの勉強のために冗長でも行いました。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。

まず、スプレッドシートにこの様に配置しました。

黄色いセルの所に配列の最大値を出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする
2:緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=5)
3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する
4:ログで配列を取得できたことを確認
5:最大値に仮の値ansを0で初期化して定義
6:スプレッドシートに二次元配列として格納する配列ans2を定義
7:ループとIFで最大値を比較しながら代入してそのログをトレースしながら出力
8:ansを二次元配列としてans2に追加する
9:ログでans2を出力して確認
10:スプレッドシートの黄色いセルに最大値を出力

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:緑色のセル(B1)にあるN乗のNを取得(この例の場合N=10)

const N=ss.getRange(1,2).getValue();

手順3:配列arrayを宣言して、灰色のセルの範囲の配列を格納する

const array = ss.getRange(2, 2, 1, N).getValues();

手順4:ログで配列を取得できたことを確認

console.log(array);

手順5:最大値に仮の値ansを0で初期化して定義

let ans = 0;

手順6:スプレッドシートに二次元配列として格納する配列ans2を定義

const ans2 = [];

手順7:ループとIFで最大値を比較しながら代入してそのログをトレースしながら出力

//ループとIFで最大値を比較しながら代入してそのログをトレースしながら出力
  for (let i = 0; i < N; i++) {
    if (array[0][i] > ans) {
      ans = array[0][i]
    }
    console.log(`現在の最大値:【${ans}】`);
  }

手順8:ansを二次元配列としてans2に追加する

ans2.push([ans]);

手順9:ログでans2を出力して確認

console.log(ans2);

手順10:スプレッドシートの黄色いセルに最大値を出力

ss.getRange(4, 2).setValue(ans2);

スプレッドシートの実行結果です。

GASでの全コードはこちらになります。

function loop17() {

  //スプレッドシートからアクティブシートをアクセスする
  const ss = SpreadsheetApp.getActiveSheet();

  //緑色のセル(B1)にある、リストの長さNを取得(この例の場合N=5)
  const N = ss.getRange(1, 2).getValue();

  //配列arrayを宣言して、灰色のセルの範囲の配列を格納する
  const array = ss.getRange(2, 2, 1, N).getValues();

  //ログで配列を取得できたことを確認
  console.log(array);

  //最大値に仮の値ansを0で初期化して定義
  let ans = 0;

  //スプレッドシートに二次元配列として格納する配列ans2を定義
  const ans2 = [];

  //ループとIFで最大値を比較しながら代入してそのログをトレースしながら出力
  for (let i = 0; i < N; i++) {
    if (array[0][i] > ans) {
      ans = array[0][i]
    }
    console.log(`現在の最大値:【${ans}】`);
  }

  //ansを二次元配列としてans2に追加する
  ans2.push([ans]);

  //ログでans2を出力して確認
  console.log(ans2);

  //スプレッドシートの黄色いセルに最大値を出力
  ss.getRange(4, 2).setValue(ans2);

}

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

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

恵比寿ガーデンプレイスの石像

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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

paiza レベルアップ問題集 「FINAL問題 FizzBuzz」をPythonとGASで解いてみた

この記事を読むと、PythonとGASでのIF文、Forループの基本的書き方を学べます。
また、3で割れる場合、5で割れる場合、3と5で割れる場合などの条件分岐の指定で使う剰余演算子も詳しく見ていきます。
FizzBuzz問題と言って、3で割れる場合はFizz、5で割れる場合はBuzz、両方で割れる場合はFizzBuzzというメジャーなプログラミング問題を扱っています。

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

GASはスプレッドシートを使っています。
GASはGoogle Apps Scriptと言って、JavaScriptの文法をベースにしているので、JavaScriptの学習中の方にもお役立て出来るかも知れません。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

FizzBuzz (paizaランク D 相当)

問題:1 ~ 100 の整数に対して、3 と 5 の両方で割り切れるなら FizzBuzz を、
3 でのみ割り切れるなら Fizz 、5 でのみ割り切れるなら Buzz を改行区切りで出力してください。
また、どちらでも割り切れない場合は、その数字を改行区切りで出力してください。

ではまず、Pythonで解いてみます。

<<Pythonでの解き方>>

基本的なループとIF文による分岐です。
手順はこの様になります。

手順1:ループで1〜100までの数字の設定
手順2:ifで3と5の両方で割り切れる場合の処理
手順3:elifで3のみ割り切れる場合の処理
手順4:elifで5のみ割り切れる場合の処理
手順5:上記以外(3でも5でも割り切れない場合)

手順1:ループで1〜100までの数字の設定

for num in range(1,101):

として、終了の所が101未満で1〜100まで出力出来ます。

手順2:ifで3と5の両方で割り切れる場合の処理

if num%3==0 and num%5==0:
        print('FizzBuzz')

手順3:elifで3のみ割り切れる場合の処理

elif num%3==0:
        print('Fizz')

手順4:elifで5のみ割り切れる場合の処理

elif num%5==0:
        print('Buzz')

手順5:上記以外(3でも5でも割り切れない場合)

else:
        print(num)

全コードと実行結果です。

for num in range(1,101):
    if num%3==0 and num%5==0:
        print('FizzBuzz')
    elif num%3==0:
        print('Fizz')
    elif num%5==0:
        print('Buzz')
    else:
        print(num)

・・・中略・・・

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。
まず、スプレッドシートの1行〜100行までをこの様に塗りつぶしました。
この範囲の1〜100までのFizz、Buzzを出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

手順はこのようになります。

1:スプレッドシートからアクティブシートをアクセスする
2:FizzBuzzの結果を格納する配列arrayを宣言する
3:ループで1〜100までの数numを発生させる
4:numが3と5の両方で割れる場合に「FizzBuzz」を配列に追加させる
5:numが3のみ割れる場合「Fizz」を配列に追加させる
6:numが5のみ割れる場合「Buzz」を配列に追加させる
7:上記のどれでも無い場合(3でも5でも割れない)はその数自体を配列に格納する
8:ログでarrayにFizzBuzzの結果を格納できたことを確認する
9:スプレッドシートの黄色いセルに配列arrayに格納されたFizzBuzzの結果を出力する

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

これで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:FizzBuzzの結果を格納する配列arrayを宣言する

let array=[];

手順3:ループで1〜100までの数numを発生させるコード

for(let num=1;num<=100;num++)

手順4から手順7までのコード
手順4:numが3と5の両方で割れる場合に「FizzBuzz」を配列に追加
手順5:numが3のみ割れる場合「Fizz」を配列に追加させる
手順6:numが5のみ割れる場合「Buzz」を配列に追加させる
手順7:上記のどれでも無い場合(3でも5でも割れない)はその数自体を配列に追加する

for num in range(1,101):
    if num%3==0 and num%5==0:
        print('FizzBuzz')
    elif num%3==0:
        print('Fizz')
    elif num%5==0:
        print('Buzz')
    else:
        print(num)

手順8:ログでarrayにFizzBuzzの結果を格納できたことを確認する

console.log(array);

・・・中略・・・

手順9:スプレッドシートの黄色いセルに配列arrayに格納されたFizzBuzzの結果を出力する

ss.getRange(1,1,100).setValues(array);

スプレッドシートの実行結果です。

・・・中略・・・

GASでの全コードはこちらになります。

function loop16() {

  //スプレッドシートからアクティブシートをアクセスする
  const ss = SpreadsheetApp.getActiveSheet();

  //FizzBuzzの判定結果を格納する出力用の配列を用意する
  let array = []

  //ループで1〜100までの数に対してFizzBuzz判定
  for (let num = 1; num <= 100; num++) {

    //numが3と5の両方で割れる場合に「FizzBuzz」を配列に追加させる
    //numが3のみ割れる場合「Fizz」を配列に追加させる
    //numが5のみ割れる場合「Buzz」を配列に追加させる
    //上記のどれれも無い場合(3でも5でも割れない)はその数自体を配列に格納する

    if (num % 3 == 0 && num % 5 == 0) {
      array.push(['FizzBuzz']);
    } else if (num % 3 == 0) {
      array.push(['Fizz']);
    } else if (num % 5 == 0) {
      array.push(['Buzz']);
    } else {
      array.push([num]);
    }
  }

  //ログでarrayに累乗の計算結果を格納できたことを確認する
  console.log(array);

  //スプレッドシートの黄色いセルに配列arrayに格納されたFizzBuzzの結果を出力する
  ss.getRange(1, 1, 100).setValues(array);

}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

OLYMPUS DIGITAL CAMERA

フランス、バカラのシャンデリア

■ 参考文献の紹介■

じっくり丁寧にPythonを学びたい方向け。
まずはpaizaラーニングなどの学習コンテンツで学んで、基礎をマスターしたら、この本でじっくりと初級から中級レベルを目指せます。

初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本でじっくり学べます。

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

paizaレベルアップ問題集でPythonとGASを解いて見たに戻る
メインメニューに戻る
Python自作サンプル
GASサンプル
基本情報技術者試験

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