0

ばかげた質問をして申し訳ありません。

私はビデオや本で Python を学んでいますが、他に何の助けもありません。

基本的な python プログラミングの単純な違いを理解できません。

########################################AAAAAA
    costs = [5,10,15,20]

    def sum_cart(item):
        total_cost = 0
        for this in costs:
            this = this + total_cost
        return total_cost
    print sum_cart(costs)
########################################BBBBBBBBBBBB
    def sum_cart(item):
        total_cost = 0
        for this in costs:
            total_cost = this + total_cost
        return total_cost
    print sum_cart(costs)
##################################################CCCCCC
    def sum_cart(item):
        total_cost = 0
        for this in costs:
            total_cost = this + total_cost
            return total_cost
    print sum_cart(costs)

- - - - - -質問 - - - - - -

結果は、A --> 0、B --> 50、C --> 5 です。

なぜ結果がそのまま表示されるのか、まだ混乱しています。

私の理解が正しければ、A では、「this」はリストから 5 を取得し、5 が total_cost に追加されます。これは 0 です。「this」はそれぞれ 10、15、および 20 を呼び出し、「this」は新しい値を取得します。しかし、total_cost は 0 のままなので、結果は 0 です。

次に B で、'this' = 5 が呼び出され、現在の 'total_cost' = 0 (5) に追加されると、total_cost が更新されます。ループは戻り、それぞれ 10、15、20 と 'total_cost' を取り込みます。は 50 に更新されています。これまでのところ、良いと思います。

しかし、Cでは、「this」がリストから5の値をもたらすと「total_cost」が更新されるため、何が起こっているのかわかりません。次に、'total_cost' を 5 に戻す必要があります。for ループは戻って、total_cost = this (おそらく 10) + total_cost (現在は 5) を実行し、ループを再度実行するべきではありませんか? 「リターン」機能について何が欠けていますか?

4

10 に答える 10

2

最初の 2 つの仮定は正しいです。

C ではreturn、関数をすぐに終了します。ループはその時点で中止され、戻りますtotal_cost(その時点では 5 です)。

于 2012-08-21T19:53:09.723 に答える
1

書かれているように、3つすべてに何か問題があります。次のようにもっと書く必要があります。

costs = [5,10,15,20]

def sum_cart(items):
    total = 0
    for item in items:
        total = total + item
    return total

print sum_cart(costs)

あなたの例 B でさえ、正しい答えが得られますが、 parameter を渡しているという点で間違っていますがitem、ループではグローバル変数をループしていますcosts(そのため、関数に渡したパラメーターを実際には使用していません) )。

于 2012-08-21T20:06:53.447 に答える
0

return関数全体から戻り、終了します。3 番目の例では、for ループは 1 回だけ実行されます。最初の実行の最後に、関数は戻り、残りの for ループは発生しません。

于 2012-08-21T19:52:59.677 に答える
0

returnそれが見つかった関数の実行を常に終了します。

したがって、最後の例では、関数が に達するとすぐに、return関数sum_cart()は終了し、戻りますtotal_cost(最初に遭遇したときは 5 に等しくなります。

他の 2 つの例では、returnステートメントがfor ループのにあることに注意してください。これが、配列の反復処理が完了するまで値を返さない理由です。

于 2012-08-21T19:53:47.743 に答える
0

サンプル A では、total_cost は決してゼロではありませんでした。total_cost から値ゼロを取得し、それを別のものに追加しましたが、その値も変更されません。

サンプル B では、 の値が何であれ、this毎回 total_cost に追加しています。したがって、進むにつれて値が蓄積されます。Python の等号の左側にあるものはすべて、右側の式の値を取ります。

サンプル C では、インデントが異なり、return ステートメントが for ループ内にあります。これにより、関数 sum_cart は、このコード行に到達するとすぐに total_cost の現在の値を返します (最初に for ループを通過する)。return はループの現在の繰り返しからあなたを追い出すだけではなく、あなたが中にいるどんな関数からもあなたを追い出します。ここで行っているように、オプションで値を返すことができます。

于 2012-08-21T19:56:15.127 に答える
0

綴るべきではないか

for this in item:

それ以外の

for this in costs:

?

于 2012-08-21T19:56:21.733 に答える