CodeWars 05: Factorial


問題の説明


Your task is to write function factorial
せいぞうこうじょう

せいげんじょうけん


None

I/O例


None

に答える

from functools import reduce 

def factorial(n):
    return reduce(lambda x, y : x * y , [v for v in range(1, n+1)]) if n > 0 else 1
Factoryって何ですか?
指定された正の整数より大きいか小さいかのすべての数値の積.
和だとSUMだと簡単に解決できるけど困ったのは和「積み重ね」というキーワードを思い浮かべると
Reduceを思い出すreduceはmapやfilter関数のように所定のリストや文字列などに順次「条件」を適用できる関数です.しかし、mapがそれぞれに適用され、filterが所定の条件に合致する子供だけを選択すると、reduceは適用後に蓄積される.
だから
  • の3つの演算子を使用して条件を設定し、0より大きい場合にのみreduce式(因数(0)が1)
  • を使用します.
  • リストをコンパイルし、rangeに基づいて数値を抽出します.
  • 以降に抽出された数字をreduceとlambda式で順次乗算する.
  • 別の解釈

    def factorial(n):
        j = 1
        for i in range(1, n+1):
           j *= i
        return j 
    モジュールを必要とせずにfor loopを使用して問題を解決します.
    from math import factorial
    驚くべきことに、Pythonでは工場もmathモジュールに含まれています.(私も初めて知りました)
    与えられた関数も階乗であり,個々に実装する必要はなく,インポートするだけでよい.
    簡単すぎるでしょう?🤗