在Python中使用for循环进行迭代

时间:2013-02-05 17:06:19

标签: python for-loop

任何人都可以帮助理解为什么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)

6 个答案:

答案 0 :(得分:6)

你在循环中调用return 因为它当前缩进的位置,所以它会在第一次迭代后执行。可能你想把它移动到外面循环(与for本身相同的缩进级别),所以在迭代完成后调用它:

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

    return total

答案 1 :(得分:1)

您的return语句缩进for语句下方。解决这个问题,你应该没问题。

答案 2 :(得分:1)

您的返回行使用for循环缩进。它将在第一个循环后返回。去缩那条线就可以了。

答案 3 :(得分:1)

您不应在return循环中使用for语句,而应使用相同级别。

答案 4 :(得分: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语句。

答案 5 :(得分: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))