4

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

有没有更好的方法可以在不使用递归的情况下做到这一点?对于令人难以置信的初学者问题,我很抱歉,但我正在尝试自学如何编码。你必须从某个地方开始!

谢谢!

4

8 回答 8

7

由于您正在尝试学习编码,因此我不会给您一个完整的解决方案,但我会给您一些提示:

  • 有一个for从 1 运行到 n 的循环(使用range(1, n+1))而不是你的while-loop。这将生成您想要乘以和迭代正确次数的值(while有时循环可能有点棘手)。

  • 有一个名为的变量product来存储每次通过循环的乘法结果。

  • 在进入-loopproduct之前进行初始化。for进入后,您只需更新product.

  • 完成循环后,您可以使用该return语句返回 的值product

  • 最后,出于测试目的,您可能希望从一个小的值开始n,例如 4,然后打印出您在循环内计算的值,以验证您的代码是如何工作的。

有更多简洁和 Pythonic 的方法可以做到这一点,但这使用您已经设置的代码结构。当然递归以及你提到的。

一旦你掌握了基础知识,你就会喜欢用更惯用的方式来写这个,或者调用为你做这件事的适当的函数。

于 2012-09-02T00:53:40.443 回答
4

好吧,这是另一种 Pythonic 方法。

>>> import operator
>>> numbers = range(1, 11)
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> reduce(operator.mul, numbers)
3628800
于 2012-09-02T01:17:20.713 回答
2

假设你的意思是阶乘函数,你可以简单地使用math.factorial()

>>> import math
>>> math.factorial(10)
3628800
于 2012-09-02T00:53:51.550 回答
2

本质上,您试图找到数字 n 的阶乘。求一个数的阶乘,有两种方法

  1. 使用循环结构
  2. 使用递归(正如你所提到的)

作为一名新程序员,最好使用一个从 1 到 n 运行的简单循环结构,并将每次迭代的相乘值放入一个变量中。这个变量就是你的答案。但也要知道递归也可以工作并使代码看起来很优雅。快乐编程!

于 2012-09-02T00:57:54.633 回答
1

这称为阶乘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.

于 2012-09-02T00:54:38.750 回答
1
 def factorial(n):
     if n <= 1: return 1
     return n * factorial(n-1)

我一直认为阶乘是学习递归的典型例子......

于 2012-09-02T01:04:46.407 回答
0

另一种方法是使用scipy.product.

>>> import scipy
>>> scipy.product(xrange(1,11))
3628800
于 2012-09-02T02:00:24.253 回答
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
于 2012-09-06T10:04:26.617 回答