此代码添加最多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
答案 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 + x
或sum += 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