御宿(千葉県 房総半島 外房の海)

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

コロナ前の2016年、メキシコと姉妹都市になる千葉県の房総半島外房の御宿に行ってきました。

そこで撮影した写真を動画にして見ました。

※ 音量注意 ※

●YouTube

● TikTok

動画の中から写真を掲載致します。

御宿は、海を堪能したい人にピッタリな場所です。
いわば、穴場ですね。

海と空がとても綺麗な所です。

御宿とメキシコとの歴史が刻まれています。

アミーゴ、オンジュク!!

今日も見て下さって、ありがとうございました (=^x^=)

写真の投稿を始めました。
(写真AC)のプロフィールページです。

TikTok始めました。
始めた理由は、TikTokの仕組みに興味を持ったからです。若い方限定のSNSなので、自分には無理だと思っていたのですが、他のSNSが時間に影響を受ける仕組みに対してTikTokは時間に影響を受けないループ型なので、良い動画であれば過去の動画も見て頂けるという仕組みに興味を持って始めました。TikTokは、Twitterが使える方なら多分すぐ慣れると思いますし、動画編集に至っては、YouTubeの100倍以上楽です。

インスタ再開しました。

写真のアンケートを実施しております。
宜しかったらご回答頂けますと、大変励みになります(=^x^=)

■ 関連記事 ■

自己紹介


息抜きに、写真で癒し(=^x^=)に戻る

初めてのPhotoshop

paiza レベルアップ問題集 「STEP: 9 階乗の計算」をPythonとGASで解いてみた

この記事を読むことで、PythonとGASでforループを使って階乗の計算の仕方を学べます。この記事では5!(5の階乗、5×4×3×2×1=120)を扱います。
また、ループの中で変動する値をトレースするコードも付け加えました。

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

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

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

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

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

階乗の計算 (paizaランク D 相当)

問題:
整数 N が与えられます。
N の階乗 N! を計算して出力してください。

この記事では、下記の入力例2の場合を例にして、5!を求めます。
5の階乗は、5×4×3×2×1=120です。

入力例2
5

出力例2
120

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

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

■ Pythonでの解き方 ■

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

手順として、

1:Nを標準入力で取り込む

2:階乗の計算結果factを1で初期化する


3:ループでfactにfact*=(N-i)を計算する


4:factを表示

で、行います。

まずは、プログラムの各変数の動きを追いやすいように、トレースのio出力結果と、トレースのコードを添えます。
ループの変数iは、0からこの例ですと4まで変動します。

fact=1,i=0の時

fact*=(5-0)
fact=5

fact=5,i=1の時

fact*=(5-1)
fact=20

fact=20,i=2の時

fact*=(5-2)
fact=60

fact=60,i=3の時

fact*=(5-3)
fact=120

fact=120,i=4の時

fact*=(5-4)
fact=120

これで、5!=120が求まりました。
ここまでのトレースのコードを掲載します。

計算結果です。


#標準入力で整数Nを取得する
N=int(input())

#階乗を計算するfactを1で初期化する
fact=1

#ループで階乗の計算をする

print('<<<forループに入ります。>>>')


for i in range(N):
    print('計算前のfactは'+str(fact)+'です。')
    print(str(fact)+'×「'+str(N-i)+'」を計算します。')
    fact*=(N-i)
    print('計算後のfactは【'+str(fact)+'】です。')
    print('----------------------')


print('<<<forループを抜けました。>>>')

print(fact)    

このままでは、出力結果である出力例2に対して冗長なコードが含まれているので、解答以外のprint文をコメントアウトします。

#標準入力で整数Nを取得する
N=int(input())

#階乗を計算するfactを1で初期化する
fact=1

#ループで階乗の計算をする

#print('<<<forループに入ります。>>>')


for i in range(N):
    #print('計算前のfactは'+str(fact)+'です。')
    #print(str(fact)+'×「'+str(N-i)+'」を計算します。')
    fact*=(N-i)
    #print('計算後のfactは【'+str(fact)+'】です。')
    #print('----------------------')


#print('<<<forループを抜けました。>>>')

print(fact)    

スッキリするように、コメントアウトした部分を省いたコードです。

#標準入力で整数Nを取得する
N=int(input())


#階乗を計算するfactを1で初期化する
fact=1


#ループで階乗の計算をする
for i in range(N):
    fact*=(N-i)


print(fact)    

ioの出力結果です。

■ GASでの解き方 ■

では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
このシートの緑色のセルN=5を取得して、5!を計算し、階乗の計算結果を黄色いセルに格納します。

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

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

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

2:スプレッドシートの緑色のセルの整数N(この例では5)を取得する


3:階乗の計算に使用する変数factの初期値を1にする


4:forループで階乗を計算


5:factが計算出来たことをログ出力で確認


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


7:fact2にfactの計算結果を二次元配列になるように追加


8:スプレッドシートに出力前のfact2をログ出力して確認する


9:スプレッドシートの黄色い所に階乗の計算結果を二次元配列として格納したfact2を出力する

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

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:スプレッドシートの緑色のセルの整数N(この例では5)を取得する

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

手順3:階乗の計算に使用する変数factの初期値を1にする

let fact=1;

手順4:forループで階乗を計算

Forループ内をトレースします。

fact=1,i=0の時

fact*=(5-0)
fact=5

fact=5,i=1の時

fact*=(5-1)
fact=20

fact=20,i=2の時

fact*=(5-2)
fact=60

fact=60,i=3の時

fact*=(5-3)
fact=120

fact=120,i=4の時

fact*=(5-4)
fact=120

これで、5!=120が求まりました。
Forループ内のコードを掲載します。

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


  //forループで階乗を計算
  for (let i=0;i<N;i++){
    console.log(`計算前のfactは${fact}です。`);
    console.log(`${fact}×「${N-i}」を計算します。`);
    fact*=(N-i);
    console.log(`計算後のfactは【${fact}】です。`);
    console.log('--------------------------------');
  }

  console.log('<<<forループを抜けました。>>>');

手順5:factが計算出来たことをログ出力で確認

console.log(fact);

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

let fact2=[];

手順7:fact2にfactの計算結果を二次元配列になるように追加

fact2.push([fact]);

手順8:スプレッドシートに出力前のfact2をログ出力して確認する

console.log(fact2);

手順9:スプレッドシートの黄色い所に階乗の計算結果を二次元配列として格納したfact2を出力する

ss.getRange(2,2).setValue(fact2);

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

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

function loop2no14() {

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

  //スプレッドシートの緑色のセルの整数N(この例では5)を取得する
  const N = ss.getRange(1, 2).getValue();

  //階乗の計算に使用する変数factの初期値を1にする
  let fact = 1;


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


  //forループで階乗を計算
  for (let i = 0; i < N; i++) {
    console.log(`計算前のfactは${fact}です。`);
    console.log(`${fact}×「${N - i}」を計算します。`);
    fact *= (N - i);
    console.log(`計算後のfactは【${fact}】です。`);
    console.log('--------------------------------');
  }

  console.log('<<<forループを抜けました。>>>');


  //factが計算出来たことをログ出力で確認
  console.log(fact);

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

  //fact2にfactの計算結果を二次元配列になるように追加
  fact2.push([fact]);

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

  //スプレッドシートの黄色い所に階乗の計算結果を二次元配列として格納したfact2を出力する
  ss.getRange(2, 2).setValue(fact2);

}

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

癒しの海、房総半島外房、御宿の海。

■ 参考文献の紹介■

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

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

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

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

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

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

モバイルバージョンを終了