找出一组数字的阶乘

4

我有一组数字:

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函数。


1
输入集合 = {1, 2, 3, 4, 5}。这不是一个列表,而是一个字典。 - Akhil Mathew
输入集合 = {1, 2, 3, 4, 5},这不是列表或字典。 - Neeraj Kumar
女孩你是对的!你只是错放了变量,这个问题太长了,不方便在评论中解释,所以我发了一个答案。去看看吧。 - DexJ
8个回答

6

在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", input, "is", fact)

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]

1

在第二个for循环之前,您需要重置factorial变量,它只是与先前阶乘的结果相乘。


1

math模块中也有一个内置的factorial()函数。

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

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更改为列表[]而不是字典。
其次,“input”不是您使用的关键字,您已经将其命名为item。


你还忘记将事实重置为1。希望这可以帮到你,谢谢。 - Kaustubh Kallianpur

0

你忘记在迭代后重置阶乘变量了。

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)

0

关于你的变量 >>fact<<,你将其放在了第一个循环内部,你的代码很好。

这里发生的事情是你的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)

希望这可以帮到你,在变量作用域方面做一些小的研究 :)

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}")

谢谢,Ethan Lal


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接