如何将序列中的所有数字相乘(python)

时间:2012-09-02 00:49:14

标签: python numbers sequence

就像我告诉程序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

有没有更好的方法可以不使用递归?抱歉这个令人难以置信的初学者问题,但我正在努力教自己如何编码。你必须从某个地方开始!

谢谢!

8 个答案:

答案 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. 使用循环结构
  2. 使用递归(如您所述)
  3. 作为一名新程序员,您最好使用从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