-6

このコードは、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
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

修正

コードが機能しない理由については、多くの理由があります。

forまず第一に、Pythonのループがどのように機能するかについて混乱していると思います。基本的に、配列をループするだけです。x が 10 を超えたときにチェックしてブレークする必要も、インクリメントする必要もありません。ループの使用方法については、Python ドキュメントを参照してください。forどのような場合に使用するかの例については、wiki ページを参照してください。

次に、変数の割り当ては、左側の変数と右側の評価される式で行われます。簡潔にするために、そうx + sum = sumすべきでした。sum = sum + xsum += x

3sumつ目は組み込み関数です。あなたはおそらくそれを覆い隠したくないし、すべきでもないので、sum変数の名前を別の名前に変更してください。

そして最後に、sum*sumそれを 2 の累乗にするだけで、**演算子を使用して so:を行うことができますsum ** 2

これが理解に役立つことを願っています。

于 2013-03-23T15:39:34.937 に答える
0

いくつかの問題があります。まず第一に、sumは組み込み関数なので、おそらく名前を付けたくないので、total代わりに like という名前の変数を使用してください。

次に、変数の割り当ては、左側の変数と右側の式で行われるため、簡潔にするために, またはにするx + total = total必要があります。total = x + totaltotal += 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
于 2013-03-23T15:45:36.917 に答える
0

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
于 2013-03-23T15:40:29.487 に答える