[英]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.