-1

computeBill関数内のループが繰り返されない理由を理解するのを手伝ってくれる人はいますか?

groceries = ["banana", "orange","apple"]

stock = {"banana": 6, "apple": 0, "orange": 32, "pear": 15}

prices = {"banana": 4, "apple": 2, "orange": 1.5, "pear": 3}

def computeBill(food):
    total = 0.0
    for item in food:
        total += prices[str(item)] + stock[str(item)]
        print total
        return total

computeBill(groceries)
4

6 に答える 6

6

return 現在インデントされているため、ループ内で呼び出しているため、最初の反復の後に実行されます。繰り返しが完了した後に呼び出されるように、ループの(それ自体と同じインデント レベル)に移動する必要がある可能性があります。for

def computeBill(food):
    total = 0.0
    for item in food:
        total += prices[str(item)] + stock[str(item)]
        print total

    return total
于 2013-02-05T17:08:14.590 に答える
1

あなたのreturn声明は声明の下にインデントされていますfor。それを修正すれば、うまくいくはずです。

于 2013-02-05T17:08:44.083 に答える
1

戻り行は for ループでインデントされています。最初のループの後に戻ります。その行のインデントを解除すると問題ありません。

于 2013-02-05T17:08:46.437 に答える
1

ループ内ではなく、同じレベルでreturnステートメントを使用する必要があります。for

于 2013-02-05T17:09:58.900 に答える
0

ちょうど別の解決策。

groceries = ["banana", "orange", "apple"]
stock = {"banana": 6, "apple": 0, "orange": 32, "pear": 15}
prices = {"banana": 4, "apple": 2, "orange": 1.5, "pear": 3}

print(sum(stock[item] * prices[item] for item in groceries))
于 2013-02-05T19:05:21.573 に答える
0

これを機能させるには、「return total」行を for ループと同じレベルに配置する必要がありますが、ループ内には配置しないか、反復ごとに合計を出力する場合は完全に省略します。反復していない理由は、return ステートメントによって関数が終了し、呼び出し元に値が返されるためです。したがって、基本的には次のとおりです。

groceries = ["banana", "orange","apple"]

stock = {"banana": 6,    "apple": 0,    "orange": 32,
    "pear": 15    }

prices = {"banana": 4,    "apple": 2,
    "orange": 1.5,    "pear": 3
    }

def computeBill(food):
    total = 0.0
    for item in food:
        total += prices[str(item)] + stock[str(item)]
        print total

computeBill(groceries)

出力を与える:

10.0
43.5
45.5

合計を出力したいだけの場合は、return ステートメントを使用しませんでした。

于 2013-02-05T17:17:43.440 に答える