此代码将所有自然数相加到 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
此代码将所有自然数相加到 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
啊,我看你喜欢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
至于为什么您的代码不起作用,原因有很多。
首先,我认为您对for
Python 中的循环如何工作感到困惑。基本上,它只是循环一个数组。当 x 大于 10 时,您不必检查和中断,也不必增加它。阅读有关如何使用循环的Python 文档。for
要查看何时使用它的示例,请参阅wiki 页面。
其次,变量赋值是用左边的变量和右边的要计算的表达式来完成的。所以x + sum = sum
真的应该是sum = sum + x
或者sum += x
为了简洁起见。
第三,sum
是一个内置函数。您可能不想也不应该掩盖它,因此将您的sum
变量重命名为其他名称。
最后,sum*sum
相当于将其提高到 2 的幂,您可以使用**
运算符来做到这一点:sum ** 2
.
希望这有助于您理解。
要修复代码中的错误:
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
几个问题。首先,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