繁体   English   中英

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

[英]iterating with a for loop in Python

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

由于当前缩进的位置,您正在循环调用return ,因此它将在第一次迭代后执行。 可能你想把它移到循环(相同缩进级别的for自身),所以它被调用迭代完成后:

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

    return total

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

您的返回行以for循环缩进。 它将在第一个循环后返回。 取消缩进那行就可以了。

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

为了使其正常工作,您需要将“ 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语句的情况。

只是另一个解决方案。

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM