如果我告诉程序n=10
,我该如何让它返回10*9*8*7*6*5....1
?
我想到了使用while循环,但我感觉哪里出错了,因为它没有把序列中的所有数字相加。
我的当前代码如下:
def product(n):
i=n
a=n-1
while a>0:
return i * a
b=i * a
a=a-1
i=i-1
在不使用递归的情况下,有没有更好的方法来实现它?对于这个入门级问题感到抱歉,但我正在努力自学编程。毕竟,所有人都要从零开始!
谢谢!
return
时,你不会让循环中的任何其他代码运行,并且只会循环一次。 - obatakureduce
如果你喜欢,但如果目标是学习,那可能不是很好。reduce(range(1, n+1), lambda a, b: a*b)
或者math.factorial
- Platinum Azurereturn
键时,你会退出当前函数,所以如果你想让你的循环运行多次,那么return
必须在循环外部。你需要在循环结束后,在所有工作都完成之后使用它来返回一个值。 - Levonreduce
没有错,虽然你的参数顺序颠倒了,函数应该放在第一位,序列放在第二位。这使得将reduce
和lambda结合成一个只接受序列的函数变得容易,可以使用functools.partial
,例如product_of = partial(reduce, lambda a,b: a*b)
,这样就可以轻松地编写print product_of(range(1,10+1))
。 - PaulMcG