Python缩进问题

时间:2013-06-22 17:38:55

标签: python indentation

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 个答案:

答案 0 :(得分:3)

来自docs

  

在逻辑开头引出空格(空格和制表符)   line用于计算行的缩进级别   turn用于确定语句的分组。

因此,缩进在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-loop块中,所以你的函数将首先迭代整个food iterable,一旦迭代结束total就返回。

答案 1 :(得分: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并返回它,这不是所有值的总和。

答案 2 :(得分:0)

当然,缩进在以下方面有所不同:

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

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

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

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

答案 3 :(得分:0)

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

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

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

第二个put返回循环外部,所以只有在for循环结束并且成本总和计算完成后才返回一次。

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