-6

此代码将所有自然数相加到 10,然后在 Python 中取该和的平方。我哪里做错了?

def square_of_sum():
    sum = 0
    for x in xrange(11):
        if x <= 10:
            x + sum = sum
            x += 1
        else: 
            print sum*sum
            break
4

3 回答 3

3

啊,我看你喜欢Project Euler :)

解决方案

我认为这就是您的代码的意思:

def square_of_sum():
  sum_ = 0
  for x in xrange(1, 11):
    sum_ += x
  return sum_ ** 2

要更惯用地重写它,请使用生成器理解和内置函数:

def square_of_sum():
  return sum(range(11)) ** 2

如果您有性能意识,您可以通过注意到您找到算术级数的总和来消除循环:

def square_of_sum(x):
   print (x * (x + 1) / 2) ** 2

修复

至于为什么您的代码不起作用,原因有很多。

首先,我认为您对forPython 中的循环如何工作感到困惑。基本上,它只是循环一个数组。当 x 大于 10 时,您不必检查和中断,也不必增加它。阅读有关如何使用循环的Python 文档。for要查看何时使用它的示例,请参阅wiki 页面

其次,变量赋值是用左边的变量和右边的要计算的表达式来完成的。所以x + sum = sum真的应该是sum = sum + x或者sum += x为了简洁起见。

第三,sum是一个内置函数。您可能不想也不应该掩盖它,因此将您的sum变量重命名为其他名称。

最后,sum*sum相当于将其提高到 2 的幂,您可以使用**运算符来做到这一点:sum ** 2.

希望这有助于您理解。

于 2013-03-23T15:39:34.937 回答
0

要修复代码中的错误:

def square_of_sum():
    s = 0
    for x in xrange(11):
        s += x
    print s**2

或者,更惯用地说,

def square_of_sum(n):
    print sum(range(n + 1)) ** 2

或者,要消除循环:

def square_of_sum(n):
    print (n * (n + 1) / 2) ** 2
于 2013-03-23T15:40:29.487 回答
0

几个问题。首先,sum是一个内置函数,所以你可能不想命名任何东西,所以使用一个名为类似的变量total

其次,变量赋值是用左边的变量和右边的表达式完成的,所以x + total = total应该是total = x + total,或total += x为简洁起见。

第三,既然case whenx == 11基本上只是一个return case,它应该在循环之外。

最后,total * total等价于total ** 2; 这更容易用于诸如

def square_of_sum():
    total = 0
    for x in xrange(11):
        if x <= 10:
            total += x
            x += 1
    print total ** 2

但是,如果我是你,我会使用

sum(range(11))**2
于 2013-03-23T15:45:36.917 回答