このコードは、10 までのすべての自然数を追加し、Python でその合計の 2 乗を取ります。どこで私は間違えましたか?
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 でその合計の 2 乗を取ります。どこで私は間違えましたか?
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
3sum
つ目は組み込み関数です。あなたはおそらくそれを覆い隠したくないし、すべきでもないので、sum
変数の名前を別の名前に変更してください。
そして最後に、sum*sum
それを 2 の累乗にするだけで、**
演算子を使用して so:を行うことができますsum ** 2
。
これが理解に役立つことを願っています。
いくつかの問題があります。まず第一に、sum
は組み込み関数なので、おそらく名前を付けたくないので、total
代わりに like という名前の変数を使用してください。
次に、変数の割り当ては、左側の変数と右側の式で行われるため、簡潔にするために, またはにするx + total = total
必要があります。total = x + total
total += x
第 3 に、case whenx == 11
は基本的に return のみのケースであるため、ループの外にある必要があります。
最後に、;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
To fix the errors in your code:
def square_of_sum():
s = 0
for x in xrange(11):
s += x
print s**2
or, more idiomatically,
def square_of_sum(n):
print sum(range(n + 1)) ** 2
or, to eliminate the loop:
def square_of_sum(n):
print (n * (n + 1) / 2) ** 2