就像我告诉程序n=10
一样,如何让它返回10*9*8*7*6*5....1
?
我想了一会儿循环,但我觉得我搞砸了某个地方,因为它没有总结序列中的所有数字。
我目前的代码如下所示
def product(n):
i=n
a=n-1
while a>0:
return i * a
b=i * a
a=a-1
i=i-1
有没有更好的方法可以不使用递归?抱歉这个令人难以置信的初学者问题,但我正在努力教自己如何编码。你必须从某个地方开始!
谢谢!
答案 0 :(得分:7)
由于您正在尝试学习编码,我不会给您一个完整的解决方案,但是 我会给你一些提示:
有for
循环,从1到n(使用range(1, n+1)
)而不是while
循环运行。这将生成您想要乘以的值并迭代正确的次数(有时候while
循环可能有点棘手)。
有一个名为product
的变量,用于在每次循环时存储乘法的结果。
在您进入product
循环之前初始化for
。进入后,您只需更新product
。
完成循环后,您可以使用return
语句返回product
的值。
最后,出于测试目的,您可能希望从小n
开始,如4,并打印出您在循环中计算的值,以验证代码的工作方式
有更多简洁和pythonic方法可以做到这一点,但这会使用您已经设置的代码结构。当然也可以递归地提及。
一旦你掌握了基础知识,你就会欣赏更为惯用的写作方式,或者为你调用适当的函数。
答案 1 :(得分:4)
嗯,这是另一种Pythonic方法。
>>> import operator
>>> numbers = range(1, 11)
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> reduce(operator.mul, numbers)
3628800
答案 2 :(得分:2)
假设您的意思是阶乘函数,您只需使用math.factorial()
:
>>> import math
>>> math.factorial(10)
3628800
答案 3 :(得分:2)
你试图找到一个数字n的阶乘,基本上。为了找到数字的阶乘,有两种方法
作为一名新程序员,您最好使用从1到n的简单循环结构,并将每次迭代的乘积值放入变量中。那个变量就是你的答案。但也知道递归也会起作用并使代码看起来更优雅。快乐编程!
答案 4 :(得分:1)
这称为 factorial 。 10!相当于 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 。
def factorial(n):
product = 1
while n > 0:
product *= n
n -= 1
return product
顺便说一句,在实践中,只需使用math.factorial
。
答案 5 :(得分:1)
def factorial(n):
if n <= 1: return 1
return n * factorial(n-1)
我一直认为阶乘是学习递归的典型例子......
答案 6 :(得分:0)
另一种方法是使用scipy.product
。
>>> import scipy
>>> scipy.product(xrange(1,11))
3628800
答案 7 :(得分:0)
作为一个学习者,你应该不使用任何内置函数来实现它,它将帮助你学习编程而不仅仅是工具,因为学习工具变得更容易,你成为优秀的程序员。我有两种方法可以实现更简单的版本。
使用递归:
def product(n):
if n== 1:
return 1
return n * product(n-1)
使用简单循环:
def product(n):
res = 1
while n>1:
res = res * n
n = n - 1
return res