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)
#######################################BBBBBB
    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。循环返回并分别引入 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

You are correct in your first two assumptions.

In C, return exits the function immediately. The loop is aborted at that point, returning total_cost (which is 5, at that point).

于 2012-08-21T19:53:09.723 回答
1

这三个人都写错了。你应该写一些更像这样的东西:

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,虽然它得到了正确的答案,但它是错误的,因为您正在传递参数item,但是在您的循环中,您正在循环全局变量costs(因此您实际上并没有使用您传递给函数的参数)。

于 2012-08-21T20:06:53.447 回答
0

return returns from the entire function and ends it. In your third example, the for loop only gets to run once. At the end of its first run, the function returns and the rest of the for loop never happens.

于 2012-08-21T19:52:59.677 回答
0

return总是结束它所在函数的执行。

因此,在您的最后一个示例中,一旦函数到达returnsum_cart()函数就会结束并返回total_cost(第一次遇到它时,它将等于 5.

请注意,在其他两个示例中,该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 不仅将您从循环的当前迭代中引导出来,它还将您从内部的任何函数中引导出来,因为 return 字面意思是“回到最初调用我(我是这里的函数)的任何地方。你可以选择返回一个值,就像你在这里做的那样。

于 2012-08-21T19:56:15.127 回答
0

不应该拼音吗

for this in item:

代替

for this in costs:

?

于 2012-08-21T19:56:21.733 回答
0

在示例 A中 - 您在 this 中对 this 的值求和返回total_cost,它仍然为 0。

在示例 B - 它在语义上是正确的。您在total_cost中对 list 的值求和并返回total_cost

在示例 C中 - 返回在 for 循环中,因此列表的第一个值在total_cost中求和,并返回total_cost

于 2021-01-15T06:38:20.627 回答
0

在 C 中,一旦循环返回部分,它就会退出函数并打印 total_cost 收到的第一个值。但是您的所有三个选项都存在一个主要问题。您将成本列表作为参数(项目)传递,但您仍在循环中使用全局变量成本。

def sum_cart(item):
     total_cost = 0
     for i in items:
          total_cost += i
return total_cost
于 2021-08-26T18:07:03.993 回答
0

情况 C:

一旦循环中的第一次迭代命中'return',函数就结束了。循环是在函数内部构建的,函数已经结束。因此,循环停止。

返回的值是第一次迭代结束时的总成本:5。

于 2015-10-12T13:27:49.507 回答
0

实际上,代码 A 看起来接近正确答案,只是函数中的参数是“项目”并且您正在迭代列表“成本”。并且逻辑可以更正为 total_cost+=this,因为我们有兴趣增加 total_cost 而不是 'this' 变量。你可以试试这个代码;

costs = [5,10,15,20]

def sum_cart(costs):
    total_cost = 0
    for this in costs:
        total_cost += this
    return total_cost
print sum_cart(costs)

希望这个答案有帮助...

于 2021-01-15T06:22:21.767 回答