我有一组数字:
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
函数用于此代码。
答案 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 = 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}")
谢谢,伊桑·拉尔