查找数字列表的阶乘

时间:2017-10-06 04:29:55

标签: python for-loop math factorial

我有一组数字:

list = {1, 2, 3, 4, 5}

我希望创建一个函数来计算集合中每个数字的阶乘并打印它。

input_set = {1, 2, 3, 4, 5}
fact = 1
for item in input_set:
    for number in range(1,item+1):
        fact = fact * number
    print ("Factorial of", item, "is", fact)

我得到的输出是:

Factorial of 1 is 1
Factorial of 2 is 2
Factorial of 3 is 12
Factorial of 4 is 288
Factorial of 5 is 34560

这显然是错误的。 我真的想知道我的代码有什么问题以及如何解决它。

注意:我不希望将math.factorial函数用于此代码。

8 个答案:

答案 0 :(得分:6)

fact=1设置为for循环。

input_set = {1, 2, 3, 4, 5}
for item in input_set:
    fact = 1
    for number in range(1,item+1):
        fact = fact * number
        print ("Factorial of", input, "is", fact)

答案 1 :(得分:2)

def factorial(n):

    fact = 1

    for factor in range(1, n + 1):
        fact *= factor

    return fact

>>> my_list = [1, 2, 3, 4, 5]
>>> my_factorials = [factorial(x) for x in my_list]
>>> my_factorials
[1, 2, 6, 24, 120]

答案 2 :(得分:1)

你需要在第二个for循环之前重置事实,它只是乘以前一个阶乘的结果。

答案 3 :(得分:1)

factorial()模块中还有一个内置的math

from math import factorial

def factorialize(nums):
    """ Return factorials of a list of numbers. """

    return [factorial(num) for num in nums]

numbers = [1, 2, 3, 4, 5]

for index, fact in enumerate(factorialize(numbers)):    
    print("Factorial of", numbers[index], "is", fact)

打印:

Factorial of 1 is 1
Factorial of 2 is 2
Factorial of 3 is 6
Factorial of 4 is 24
Factorial of 5 is 120

答案 4 :(得分:0)

input_set = [1, 2, 3, 4, 5]
fact = 1
for item in input_set:
    for number in range(1, item+1):
        fact = fact * number
    print "Factorial of", item, "is", fact
    fact = 1

根据需要运作......在此处测试[https://www.tutorialspoint.com/execute_python_online.php]

这应该是你的代码。 首先,将input_set更改为list []而不是字典 其次,“输入”不是您使用的关键字,您已将其命名为项目。

答案 5 :(得分:0)

您忘记在迭代后重置factorial变量。

input_set = {1, 2, 3, 4, 5}
for item in input_set:
    fact = 1
    for number in range(1,item+1):
    print fact
    print number
        fact = fact * number
    print ("Factorial of", item, "is", fact)

答案 6 :(得分:0)

关于你的变量>> fact<<你放在第一个for循环中,你的代码很好。

  

这里发生的事情是你的 fact = 1 初始化值只有一次在进入循环之前,而你需要在每次循环执行时都这样做。

input_set = [1, 2, 3, 4, 5]
for item in input_set:
    fact = 1
    for number in range(1,item+1):
        fact = fact * number
    print ("Factorial of", item, "is", fact)

希望这有助于并在变量范围内做一点R& D:)

答案 7 :(得分:0)

这比看起来容易。您只需要将事实/阶乘变量放在第一个循环中。这样每次循环运行时它都会重置。

for number in [1, 2, 3, 4, 5]:
   factorial = 1
   for i in range(1, number + 1):
      factorial *= i
   print(f"Factorial of {number} is {factorial}")

谢谢,伊桑·拉尔