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

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

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

# Write your code below!
def compute_bill(food):
    total = 0 
    for item in food:
        total = total + prices[item]
        return total

为什么我用上面的代码得到错误的结果,用下面的代码得到正确的结果:

# Write your code below!
def compute_bill(food):
    total = 0 
    for item in food:
        total = total + prices[item]
    return total

压痕差异是差异的原因吗?

4

4 回答 4

3

来自文档

逻辑行开头的前导空格(空格和制表符)用于计算行的缩进级别,而缩进级别又用于确定语句的分组。

因此,缩进在 Python 中非常重要。

代码 1:

def compute_bill(food):
    total = 0 
    for item in food:
        total = total + prices[item]
        return total

由于return语句在for循环内,它实际上只在一次迭代后从函数中返回。

事实上,上面的代码等价于:

def compute_bill(food):
    total = 0                       # Consider food[0] is the first key.
    total = total + prices[food[0]] # just fetch the price of first item in food
    return total                    # add it to total and return total 

代码 2:

def compute_bill(food):
    total = 0 
    for item in food:
        total = total + prices[item]
    return total

这里return的语句不在 for 循环块内,所以你的函数将首先迭代整个食物可迭代,一旦迭代结束total就会返回。

于 2013-06-22T17:41:15.350 回答
2

是的,就是缩进。该return语句在第一次迭代中执行。

def compute_bill(food):
    total = 0 
    for item in food:
        total = total + prices[item]
    return total

在此代码中,您遍历所有值并将它们相加,然后返回变量total

鉴于,在这

def compute_bill(food):
    total = 0 
    for item in food:
        total = total + prices[item]
        return total

您只将第一项添加到total并返回它,这不是所有值的总和。

于 2013-06-22T17:39:54.647 回答
0

当然,缩进有所不同,在:

for item in food:
    total = total + prices[item]
    return total

您在 for 循环的第一次迭代中返回总变量,而在:

for item in food:
    total = total + prices[item]
return total

在 for 循环中进行所有迭代返回总数

于 2013-06-22T17:40:49.583 回答
0

是的,在 Python 中缩进确实很有价值!

这是新 Python 程序员常犯的错误。

第一个放在循环中返回,因此在第一个循环中返回,然后返回并立即终止循环。

第二个 put 在循环之外返回,因此仅在 for 循环完成并且成本总和完成计算时返回一次。

与 C++ 或 JAVA 不同,缩进在 Python 中确实有很大的不同。

于 2013-06-22T17:43:12.813 回答