def prod (lsts):
product = 1
for i in lsts:
sum = 0
for x in i:
sum += x
product *= sum # I will change this line and a problem will appear
return product
b = [[2], [2,3,4], [5,2], []]
c = [[]]
print prod (b)
print prod (c)
**我的第一个问题是: 为什么当我改变行的缩进,像这样的评论:为什么变化会导致模糊的结果?
for x in i:
sum += x
product *= sum # I make the line have the same indentation with the above line.
打印的结果不为0,但6300和1?
我可以找出列表b的结果,但我不能与列表c,列表只有一个空列表。 这是我认为该程序将与列表c运行的过程:
- 第一次for循环开始。
- 秒开始循环。在第二个for循环中,对于循环结束,sum = 0.秒。
- product = 0.
- 首先用于循环结束。退货产品。
- 打印
为什么打印的结果不为0,但1?
**我的第二个问题是,为什么即使我只改变我原来的脚本是这样的:
c = [] # in my original script, I have c = [[]]
打印也为1,不为0的结果呢?
在回答你的第一个问题 - 改变的倍线被执行数.. – mgilson
'为什么当我用这样的注释改变行的缩进:' - 那么'product'赋值是循环的一部分。 – devnull
请记住,缩进是非常非常重要的蟒蛇。将'product * = sum''移动到和''sum + = x''相同的缩进位置在for循环中移动它 – aruisdante