取相加数的平方

时间:2013-03-23 15:38:24

标签: python

此代码添加最多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

3 个答案:

答案 0 :(得分: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

修复

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

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

其次,变量赋值是使用左侧的变量和右侧要计算的表达式完成的。因此,为了简洁,x + sum = sum应该是sum = sum + xsum += x

第三,sum是一个内置函数。您可能不想也不应该过度遮蔽它,因此将sum变量重命名为其他内容。

最后,sum*sum等同于将其提升到2的幂,您可以使用**运算符执行此操作,因为:sum ** 2

希望这有助于您理解。

答案 1 :(得分: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

答案 2 :(得分:0)

有几个问题。首先,sum是一个内置函数,因此您可能不想命名任何内容,因此请使用名为total之类的变量。

其次,变量分配是使用左侧的变量和右侧的表达式完成的,因此x + total = total应为total = x + total,或total += x以简化。

第三,由于x == 11基本上只是一个返回的情况,它应该在循环之外。

最后,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