【カーディガンセット】スクラッチとPythonで階乗を学ぼう

オンラインハッカソン
Screenshot
Scratch星人
Scratch星人

8回目の「オンラインハッカソンに挑戦」を始めていきます。

前回、7回目は高難易度の問題でしたが、今回はやさしめです。

タイトルでは「階乗」という難しい言葉が登場しました。

もちろん全て、解説しながら進めていきますので、楽しく学習していきましょう。

「カーディガンセット」の問題

Screenshot

問題はシンプルです。

  • 入力データ:正の整数(但し最大は「7」とする)
  • 出力データ:上記の数字を階乗した値

要約してみましたが、分かりづらいですね・・。
解説していきます。

正の整数とは0より大きい数で分数でも小数でもない数のことを言います。
別名、自然数とも呼ばれますね。

例えば、1、2、3、4、38、723、86483などが正の整数です。

次に「階乗」について説明します。

入力データが「5」だとします。
その場合、1x2x3x4x5とひとつずつ掛け算していくことを階乗と言い、計算すると答えは「120」になります。

「3」の階乗であれば、1x2x3で、答えは「6」となります。

Scratch星人
Scratch星人

どうでしょうか?

入力データと、その階乗の値を出力するということが理解できましたか?

それでは、スクラッチでコードを作成してみましょう。
(自分で考えたい人は、解いてから下に進んでくださいね)

スクラッチでプログラムを作成

Screenshot

スクラッチで作成するとコードはこのようになると思います。

入力された数字の回数分繰り返し掛け算して、出力という変数に格納しています。

ポイントは「入力回繰り返す」の中のコードです。

「計算を1ずつ変える」
「出力を計算*出力にする」

この2つを正しく理解出来ているあなたは、スクラッチ初心者卒業です。
中級者になったと自信を持って大丈夫です!

Pythonのコードを3つ紹介

Screenshot

このコードは、これまで何度か登場したfor文(繰り返し)です。
スクラッチで作成したものをそのままPythonで書いたようなコードです。

4行めの、a *= iとは、a = a * iの省略形なのですが、スクラッチの「出力を計算*出力にする」と同じ処理を実行しています。

Screenshot

次に、こちらのコードを解説します。
Pythonのモジュールのひとつである「math」をインポートして(読み込んで)使用します。

Scratch星人
Scratch星人

便利機能が用意されているんだな〜くらいに理解してもらえれば、とりあえずは大丈夫です。

そして、mathの中の「prod」というメソッドを実行しています。
簡単に説明すると「階乗を計算してくれるもの」です。

ここで、prodの後の()の中に注目してみましょう。

range(1, n+1)となっていますね。
例えば、n=3の場合、range(1, 4)と置き換えられます。

1x2x3x4を計算すると答えは、24になってしまいます。
(正しい答えは、1x2x3=6です)

Pythonではrange(1, 4)の場合、次のような意味を持ちます。

1から4のひとつ前まで
つまり「1から3まで」という意味になるのです。

Screenshot

最後のコードはひとつ前のコードを別の書き方をしたようなイメージです。

簡単に解説すると、reduceを使うことによって、決められた範囲の値にアクセス出来るようになり、operator.mulを使うことで、掛け算をしてくれるというものです。

3パターンのPythonコードを紹介しましたが、ひとつめのコードの内容が理解できれば問題ありません。

あとは、いろんな書き方がある、という事を分かってもらえれば十分です。

まとめ

8回目のオンラインハッカソンに挑戦が終了しました。

スクラッチでの難易度は、簡単すぎず、難しすぎず、ちょうど良かったのではないでしょうか?

Pythonのコードもたくさん紹介しました。
興味が湧いてきた、というあなたは、ぜひPythonにも挑戦してみてくださいね。

さて、次回からのオンラインハッカソンに挑戦ですが、これまでより問題の難易度が上がります。
(今までは難易度D、次回からはCにレベルアップします)

次回もぜひ一緒に挑戦していきましょう♪( ´▽`)

コメント

タイトルとURLをコピーしました