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

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

paiza レベルアップ問題集 「STEP: 4 2 の累乗を表示」をPythonとGASで解いてみた

この記事を読むことで、PythonでのForループの基本的な書き方と対応づけて、内包表記で会得することが可能になります。
また、二乗、三乗などの累乗の計算方法を学べます。

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

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

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

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

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

2 の累乗を表示 (paizaランク D 相当)

問題:整数 N が与えられます。
2 の 1 乗から 2 の N 乗までを改行区切りで出力してください。

この記事では、入力例3でNに10が与えられたという条件で解いて行きます。

入力例3
10

出力例3
2
4
8
16
32
64
128
256
512
1024

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

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

<<Pythonでの解き方>>

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

手順として、
1:標準入力でNを取得
2:for文で1からN+1までのループを設定する
3:2**Nで2のN乗を計算して出力

基本のループのコード

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

#ループでarrayに2のN乗を追加する
for i in range(1,N+1):
    print(2**i)

これを内包表記でたった1行で書くとこの様になります。

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

#【内包表記】ループでarrayに2のN乗を追加する
[print(2**i) for i in range(1,N+1)]    

公式のようにまとめると、使った内包表記は、

[計算結果と出力 いつものfor文]

になります。

<<GASでの解き方>>

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

スプレッドシートの黄色い所に2の累乗を出力します。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:緑色のセル(B1)にあるN乗のNを取得(この例の場合N=10)
3:累乗の結果を格納する配列arrayを宣言する
4:ループでarrayに累乗の計算結果を二次元配列になるように格納する
5:ログでarrayに累乗の計算結果を格納できたことを確認する
6:スプレッドシートの黄色いセルに配列arrayに格納された累乗の計算結果を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

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

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

手順3:累乗の結果を格納する配列arrayを宣言する

let array=[];

手順4:ループでarrayに累乗の計算結果を二次元配列になるように格納する

for(let i=1;i<=N;i++){
    array.push([2**i]);
  }

手順5:ログでarrayに累乗の計算結果を格納できたことを確認する

console.log(array);

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

ss.getRange(3,2,N).setValues(array);

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

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

<全コード>

function loop15(){
  
  //スプレッドシートからアクティブシートをアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
  //緑色のセル(B1)にあるN乗のNを取得(この例の場合N=10)
  let N=ss.getRange(1,2).getValue();

  //累乗の結果を格納する配列arrayを宣言する
  let array=[];

  //ループでarrayに累乗の計算結果を二次元配列になるように格納する
  for(let i=1;i<=N;i++){
    array.push([2**i]);
  }

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

  //スプレッドシートの黄色いセルに九九のNの段が入った二次元配列を出力する
  ss.getRange(3,2,N).setValues(array);

}

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

お疲れ様でした。

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

2017年、六本木ヒルズのハロウィン

■ 参考文献の紹介■

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

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

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

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

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

←前の問題                       次の問題→

paiza レベルアップ問題集 「STEP: 3 九九の表示 2」をPythonとGASで解いてみた

この記事を読むと、Pythonで標準入力で整数値をする書き方、IF文、Forループの基本的な書き方と対応づけて、内包表記でのループ・if・elseを1行で書くことが可能になります。

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

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

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

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

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

九九の表示 2 (paizaランク D 相当)

問題:整数 N が与えられます。
九九の N の段を半角スペース区切りで出力してください。
この記事では、入力例2でNに5が与えられたという条件で解いて行きます。

入力例2
5

出力例2
5 10 15 20 25 30 35 40 45

この問題では、5〜40までがスペース区切り、最後の45の所で改行する形で書かれています。
ループでiをiから9まで回して、i*N(この例ではN=5)で5倍して、iが9(計算結果が45)ではない時にスペース区切り、そうでなければ改行での出力が求められます。

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

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

手順として、
1.N=int(input())で九九のNの段を標準入力で読み込む
2.for文でi=1からi=9までループを回す
3.ループ内でiが9ではない(i!=9)であればスペース区切りで出力する
4.else(i==9)の時は改行する

まずは最初に基本的なループとIF文のコードです。

#標準入力でNの段のNを読み込む
N=int(input())

#ループで九九のNの段を作ってスペース区切りを改行の分岐をして出力
for i in range(1,10):
    if i!=9:
        print(i*N,end=' ')
    else:
        print(i*N)

これを内包表記で書くと、ループと分岐の所がたった1行で書けます。


#標準入力でNの段のNを読み込む
N=int(input())

#【内包表記】を使ってコードを書き換える
[print(i*N,end=' ') if i!=9 else print(i*N) for i in range(1,10)]        

公式のようにまとめると、if else と for を使った内包表記は、

[真の時の結果 if 条件式 else 偽の時の結果 いつものfor文]

になります。

paiza.ioでの出力結果です。

<<GASでの解き方>>

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

九九のNの段を黄色の所に求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:緑色のセル(B1)にある九九のNの段のNを取得(この例の場合N=5)
3:九九のNの段を格納する作業用の配列tempを宣言する
4:ループでtempにNの段の一次元配列を格納する
5:ログでtempに九九のNの段が格納されたことを確認する
6:スプレッドシートに二次元配列として格納する配列arrayを宣言する
7:ここでarrayにtempを入れて二次元配列に出来たことをログで確認する
8:スプレッドシートの黄色いセルに九九のNの段が入った二次元配列を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

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

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

手順3:九九のNの段階を格納する作業用の配列tempを宣言する

let temp=[]

手順4:ループでtempにNの段の一次元配列を格納する

for (let i=1;i<=9;i++){
    temp.push(i*N);
  }

手順5:ログでtempに九九のNの段が格納されたことを確認する

console.log(temp);

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

let array=[];

手順7:ここでarrayにtempを入れて二次元配列に出来たことをログで確認する

array.push(temp);
console.log(array);

手順8:スプレッドシートの黄色いセルに九九のNの段が入った二次元配列を出力する

ss.getRange(3,2,1,9).setValues(array);

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

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

<全コード>

function loop14(){

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

  //緑色のセル(B1)にある九九のNの段のNを取得(この例の場合N=5)
  const N=ss.getRange(1,2).getValue();

  //九九のNの段を格納する作業用の配列tempを宣言する
  let temp=[];

  //ループでtempにNの段の一次元配列を格納する
  for (let i=1;i<=9;i++){
    temp.push(i*N);
  }

  //ログでtempに九九のNの段が格納されたことを確認する
  console.log(temp);

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

  //ここでarrayにtempを入れて二次元配列に出来たことをログで確認する
  array.push(temp);
  console.log(array);

  //スプレッドシートの黄色いセルに九九のNの段が入った二次元配列を出力する
  ss.getRange(3,2,1,9).setValues(array);

}

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

お疲れ様でした。

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

都庁。2019年4月【コロナ前に撮影】

■ 参考文献の紹介■

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

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

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

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

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

←前の問題                        次の問題→

paiza レベルアップ問題集 「STEP: 2 九九の表示 1」をPythonとGASで解いてみた

この記事を読むと、PythonでのIF文、Forループの基本的な書き方と対応づけて、内包表記でのループ・if・elseを1行で書くことが可能になります。
また、このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

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

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

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

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

九九の表示 1 (paizaランク D 相当)

問題:九九の 8 の段を半角スペース区切りで出力してください。
入力値:なし
期待する出力値:「8 16 24 32 40 48 56 64 72」

この問題では、8〜64までがスペース区切り、最後の72の所で改行する形で書かれています。
ループでiを1から9まで回して、i*8で8倍して、iが9(計算結果が72)ではない時にスペース区切り、そうでなければ改行での出力が求められます。

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

手順として、
1.for文でi=1からi=9までループを回す
2.ループ内でiが9ではない(i!=9)であればスペース区切りで出力する
3.else(i==9)の時は改行する

まずは最初に基本的なループとIF文のコードです。

for i in range(1,10):
    if i!=9:
        print(i*8,end=' ')
    else:
        print(i*8)

これを内包表記でたった1行で書くとこの様になります。

[print(i*8,end=' ') if i!=9 else print(i*8) for i in range(1,10)]

公式のようにまとめると、if else と for を使った内包表記は、

[真の時の結果 if 条件式 else 偽の時の結果 いつものfor文]

になります。

どちらの実行結果も、この様になりました。

<<GASでの解き方>>

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

九九の8の段を黄色の所に求めます。

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

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

1:スプレッドシートからアクティブシートをアクセスする
2:九九の8の段階を格納する作業用の配列tempを宣言する
3:ループでtempに8の段の一次元配列を格納する
4:ログでtempに九九の8の段が格納されたことを確認する
5:スプレッドシートに二次元配列として格納する配列arrayを宣言する
6:ここでarrayにtempを入れて二次元配列に出来たことをログで確認する
7:スプレッドシートの黄色いセルに九九の8の段が入った二次元配列を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:九九の8の段階を格納する作業用の配列tempを宣言する

let temp=[]

手順3:ループでtempに8の段の一次元配列を格納する

pushを使うことで配列tempに追加格納しています。

 for (let i=1;i<=9;i++){
    temp.push(i*8);
  }

手順4:ログでtempに九九の8の段が格納されたことを確認する

console.log(temp);

手順5:スプレッドシートに二次元配列として格納する配列arrayを宣言する

let array=[];

手順6:ここでarrayにtempを入れて二次元配列に出来たことをログで確認する

array.push(temp);
console.log(array);

手順7:スプレッドシートの黄色いセルに九九の8の段が入った二次元配列を出力する

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

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

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

function loop13(){
  
  //SpreadsheetAppから階層を辿ってアクティブシートをアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
  //九九の8の段階を格納する作業用の配列tempを宣言する
  let temp=[]

  //ループでtempに8の段の一次元配列を格納する
  for (let i=1;i<=9;i++){
    temp.push(i*8);
  }

  //ログでtempに九九の8の段が格納されたことを確認する
  console.log(temp);

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

  //ここでarrayにtempを入れて二次元配列に出来たことをログで確認する
  array.push(temp);
  console.log(array);

  //スプレッドシートの黄色いセルに九九の8の段が入った二次元配列を出力する
  ss.getRange(1,1,1,9).setValues(array);

}

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

お疲れ様でした。

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

東京スカイツリー、割とドアップ!!!!!

■ 参考文献の紹介■

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

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

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

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

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

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

【Python関数初心者向けの関数ドリル!!】関数を立体図形で使いこなす!ピラミッドを作れ!(立方体・直方体・円柱・三角錐・四角錐・円錐)

この記事を読むことで、Pythonの関数で立方体、ピラミッド・三角錐・円錐・円柱の体積を求めることによって、関数をガンガン使いこなせる様になる例題をガシガシ解くことができます。関数のドリルのような記事だとイメージして頂いて大丈夫です。

また、体積なので、三乗を使い、Pythonでの累乗(二乗、三乗)などの書き方も学べます。

前回の記事で、関数をカレーライスを作る時の例を通して実際に手を動かして作ってみました。
【Python関数初心者向け!!】関数を「カレーライス」で覚えて、平面図形の面積を求めてみる(長方形、三角形、台形)とプログラミング英語

宜しければこちらもご覧いただけますと、大変嬉しいです。
また、カレーライスを例にしたので、私が今までで食べて来た中で最も美味しいと思ったカレー屋さんの紹介のリンクも貼っています。

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

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

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

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

いきなりですが、下記のプログラムでPythonの演習をいたしましょう。

● 立方体の体積を求める ●
立方体とは、サイコロです。
こちらのサイトで詳細を書かれています。
体積の求め方は、縦、横、高さです。

サイコロだったら全部同じ長さなので、今回は3cmの立方体の体積を求めます。

まず、辺の長さをここで定義しています。

side=3

次に関数を呼び出します。

volume=cube(side)

立方体の体積を求めるcube関数が引数にside(今回は3cm)で呼び出されました。

では、cube関数のコードです。

#立方体の体積を計算する関数
def cube(x):
    return x**3

このxの所に3が入って3乗の計算結果をreturnで返しています。
二乗でも考え方は同じですが、三乗ではこのように書いています。

x**3

それが戻り値としてvolumeに入ります。

volume=cube(side)

これで、出力します。

ここまでのコードと実行結果です。

#立方体の体積を計算する関数
def cube(x):
    return x**3


#辺の長さを定義
side=3

#関数を呼び出し
volume=cube(side)

#立方体の体積を表示
print('立方体の体積は【'+str(volume)+'】cm^3です。')

● 直方体の体積●
では次に、直方体の体積を求めます。
直方体はこちらのサイトが分かりやすいです。前項の立方体の復習にもなります。

直方体の体積は、タテ×ヨコ×高さなので、この様にコードを書き換えました。
実行結果です。

#直方体の体積を計算する関数
def rectangular(x,y,z):
    return x*y*z


#タテ、ヨコ、高さを定義
vertical=3
beside=5
height=7

#関数を呼び出し
volume=rectangular(vertical,beside,height)

#直方体の体積を表示
print('直方体の体積は【'+str(volume)+'】cm^3です。')

● 円柱の体積●
円柱の体積はこちらの記事が分かりやすいです。
円柱の体積は円の面積に高さをかけて求めるので、円周率πを使うため、mathモジュールをインポートしました。
また、円周率は桁数が長いので、小数点以下3桁まで求める様にしました。

ここではこの記事に合わせて、円の半径を5cm、円柱の高さを10cmとしています。

#円周率πを使うため、mathモジュールをインポートする
import math

#円柱の体積を計算する関数
def cylinder(r,h):
    return math.pi*r**2*h


#半径と高さを定義
radius=5
height=10

#関数を呼び出し
volume=cylinder(radius,height)

#小数点以下3桁まで求める
volume=round(volume,3)

#円柱の体積を表示
print('円柱の体積は【'+str(volume)+'】cm^3です。')

円の面積については併せてこのブログ内のこちらの記事をご覧頂けると嬉しいです。
【Python初心者必見!!】改行の仕方、円周率の使って面積、球体の体積、円周を計算する関数の使い方、二乗3乗などの累乗の計算の仕方、戻り値の小数点以下桁指定

● 三角錐の体積●
三角錐と次項の四角錐については、こちらの記事が分かりやすいです。
まずは、三角錐です。
底面積である三角形の面積に高さをかけて3で割っています。

ここではこの記事に合わせて、タテ4cm、ヨコ5cm、高さ6cmとしています。
また、底面積が三角形であることと何々錐で3で割っているため、整数で求めています。
コードと実行結果です。

#三角錐の体積を計算する関数
def triangular_pyramid(x,y,z):
    return x*y/2*z/3


#タテ、ヨコ、高さを定義
vertical=4
beside=5
height=6

#関数を呼び出し
volume=triangular_pyramid(vertical,beside,height)

#三角錐の体積を表示
print('三角錐の体積は【'+str(int(volume))+'】cm^3です。')

● 四角錐の体積●
次に四角錐(ピラミッド型)の体積を求めます。
こちらも、先ほどの記事と合わせて、タテ5cm、ヨコ5cm、高さ6cmとしています。

#四角錐の体積を計算する関数
def pyramid(x,y,z):
    return x*y*z/3


#タテ、ヨコ、高さを定義
vertical=5
beside=5
height=6

#関数を呼び出し
volume=pyramid(vertical,beside,height)

#四角錐の体積を表示
print('四角錐の体積は【'+str(int(volume))+'】cm^3です。')

● 円錐の体積●
では、いよいよ最後に円錐の体積を求めます。
円錐の体積は、こちらの記事が分かりやすいです。

底円の面積に高さをかけて3で割ると求められます。
円周率πを使うので、mathモジュールをインポートしています。
ここでは半径を4cm、高さを6cmとしています。

#円周率を使うため、mathモジュールをインポートする
import math

#円錐の体積を計算する関数
def cone(r,h):
    return math.pi*r**2*h/3

#半径と高さを定義
radius=4
height=6

#関数を呼び出し
volume=cone(radius,height)

#小数点以下3桁まで求める
volume=round(volume,3)

#円錐の体積を表示
print('円錐の体積は【'+str(volume)+'】cm^3です。')


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

最後までお読み頂きありがとにゃん(=^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 相当)

問題:長さ 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の関数をカレーライスを作る時の例を通して実際に手を動かして作ってみることが出来ます。
関数とは、ざっくり言って、「カレー鍋」です。
鍋に入れる「ジャガイモ、ニンジン」が引数、出てきた料理が戻り値です。
肩の力を抜いて、長方形、三角形、台形の面積を使いながら関数に慣れて行きましょう!
あと、プログラミングと英語についても簡単に書きました。

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

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

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

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

最初に、縦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」とします。単位はprint関数内でcmということにしています。

縦の5をジャガイモ、横の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は仮引数と呼ばれると書くと、なんかごちゃごちゃしてしまいそうですが、まぁ、世の中そんなもんだと思っておけば良いんじゃないでしょうか(=^x^=)

return x*y

で、出来上がったカレーライスがお手元に届けられます。
カレーで思い出した、それなりに大事なことを書きますが、アキバヨドバシでパソコンをWindowsからMacbookに買い替えをした時に食べたカレーがめちゃめちゃ美味しかったです。
インドカリーダイニング Cobara-Hetta

もう一度、コード全体を見ますが、その時に、縦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です。')

縦とか横とか長方形とか、今までずっと英語で書いて来ましたけれど、30年ぐらい前、私が中学生だったときに英検3級に落ちて、4級しか持っていない私は本音を言うと、tate、yoko,chouhoukeiなんて書きたい所なんです。

ですが、変数名は慣習として英語を使うので(涙)
困っちまうんですけれど、44歳ながらついでに英語の勉強だと思って、グーグル先生に助けてもらいながらプログラミングをしています。

英語に自信のない方、こんなヤツでもプログラミングの記事を書いてアフリエイトとして収入を得ているので、全然大丈夫!!ですよ(笑)
あ、でも、今この記事をご覧の学生の皆様は、将来私のようにならないように、ちゃんと英語の勉強もした方が後々後悔することも無いかも。

プログラミング英語の動画紹介です。

で、話はプログラミングに戻ります。
今度は三角形を求められるようにコードを改変してみます。
関数の戻り値のところを2で割ると、お馴染みの底辺×高さ÷2ですね。

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

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

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

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

3行目でintを使っているのは、整数にするためです。これを外すと6.0cm^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です。')

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

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

この記事の後編として今度は体積を求めるプログラムを作りました。

【Python関数初心者向け関数ドリル!!】関数を立体図形で使いこなす!ピラミッドを作れ!(立方体・直方体・円柱・三角錐・四角錐・円錐)

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

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

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

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

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

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