
8回目の「オンラインハッカソンに挑戦」を始めていきます。
前回、7回目は高難易度の問題でしたが、今回はやさしめです。
タイトルでは「階乗」という難しい言葉が登場しました。
もちろん全て、解説しながら進めていきますので、楽しく学習していきましょう。
「カーディガンセット」の問題

問題はシンプルです。
- 入力データ:正の整数(但し最大は「7」とする)
- 出力データ:上記の数字を階乗した値
要約してみましたが、分かりづらいですね・・。
解説していきます。
正の整数とは0より大きい数で分数でも小数でもない数のことを言います。
別名、自然数とも呼ばれますね。
例えば、1、2、3、4、38、723、86483などが正の整数です。
次に「階乗」について説明します。
入力データが「5」だとします。
その場合、1x2x3x4x5とひとつずつ掛け算していくことを階乗と言い、計算すると答えは「120」になります。
「3」の階乗であれば、1x2x3で、答えは「6」となります。

どうでしょうか?
入力データと、その階乗の値を出力するということが理解できましたか?
それでは、スクラッチでコードを作成してみましょう。
(自分で考えたい人は、解いてから下に進んでくださいね)
スクラッチでプログラムを作成

スクラッチで作成するとコードはこのようになると思います。
入力された数字の回数分繰り返し掛け算して、出力という変数に格納しています。
ポイントは「入力回繰り返す」の中のコードです。
「計算を1ずつ変える」
「出力を計算*出力にする」
この2つを正しく理解出来ているあなたは、スクラッチ初心者卒業です。
中級者になったと自信を持って大丈夫です!
Pythonのコードを3つ紹介

このコードは、これまで何度か登場したfor文(繰り返し)です。
スクラッチで作成したものをそのままPythonで書いたようなコードです。
4行めの、a *= iとは、a = a * iの省略形なのですが、スクラッチの「出力を計算*出力にする」と同じ処理を実行しています。

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

便利機能が用意されているんだな〜くらいに理解してもらえれば、とりあえずは大丈夫です。
そして、mathの中の「prod」というメソッドを実行しています。
簡単に説明すると「階乗を計算してくれるもの」です。
ここで、prodの後の()の中に注目してみましょう。
range(1, n+1)となっていますね。
例えば、n=3の場合、range(1, 4)と置き換えられます。
1x2x3x4を計算すると答えは、24になってしまいます。
(正しい答えは、1x2x3=6です)
Pythonではrange(1, 4)の場合、次のような意味を持ちます。
1から4のひとつ前まで
つまり「1から3まで」という意味になるのです。

最後のコードはひとつ前のコードを別の書き方をしたようなイメージです。
簡単に解説すると、reduceを使うことによって、決められた範囲の値にアクセス出来るようになり、operator.mulを使うことで、掛け算をしてくれるというものです。
3パターンのPythonコードを紹介しましたが、ひとつめのコードの内容が理解できれば問題ありません。
あとは、いろんな書き方がある、という事を分かってもらえれば十分です。
まとめ
8回目のオンラインハッカソンに挑戦が終了しました。
スクラッチでの難易度は、簡単すぎず、難しすぎず、ちょうど良かったのではないでしょうか?
Pythonのコードもたくさん紹介しました。
興味が湧いてきた、というあなたは、ぜひPythonにも挑戦してみてくださいね。
さて、次回からのオンラインハッカソンに挑戦ですが、これまでより問題の難易度が上がります。
(今までは難易度D、次回からはCにレベルアップします)
次回もぜひ一緒に挑戦していきましょう♪( ´▽`)
コメント