定义变量“而”循环

问题描述:

背景信息:我目前正在完成从MIT EDX网站Python编程的课程,和我工作的部分上,而循环]定义变量“而”循环

我的问题一直在努力,如下所示:“写一个while循环,将值1加到end,end。end是我们为您定义的变量。”

当我试图回答这个问题,我把:

while end != 0: 
    total = 0 + end 
    end = end-1 
print total 

为我把在“端”的任何值返回结果为1,这显然是不正确。

然而,当我再次尝试,我的“合计”定义的循环之外,并提出:

total = 0 
while end != 0: 
    total = total + end 
    end = end-1 
print total 

这工作!

我的问题是:为什么我放入的第一个代码不起作用?在循环之外定义“全部”的意义何在?

+0

可能重复的[Python范围规则简述](http://*.com/questions/291978/short-description-of-python-scoping-rules) – jycr753

+1

它实际上与范围无关。每个循环都具有实质上不同的内容。 – TigerhawkT3

在你的第一个代码块,每次运行total = 0 + end时,你重新total

total = 0 + 10 
total = 0 + 9 
total = 0 + 8 
... 
total = 0 + 1 

在最后一行是total = 0 + 1,相当于1

在第二循环中,你正在利用的total的先前值:

total = 0 
total = 0 + 10 
total = 10 + 9 
total = 19 + 8 
... 
total = 54 + 1 

随着每次通过循环,总递增和利用。在第一个中,你将在每个循环中写下总数。

当您在while循环中定义total时,它会在每次循环时将其自身重新分配到0 + end,在程序结束时为1。在外部定义它时,它将total设置为0,然后对于while中的每个循环,它将继续向其添加值。

另外,你可以写total = total + end作为total += end,它意味着同样的事情,但实际上是(非常)快一点。

问题在于total = 0 + end。这样做是将当前值end分配给total。由于end最终变成1,这就是总数。您需要添加end到运行total

total = total + end 

或:

while end != 0: 
    total += end 
    end -= 1 
print total 

total while循环中的例子中,它是被每次end != 0重新定义,并正在打印后立即end是等于1(end = end-1将使断裂你出while循环结束后等于1)。

在另一个例子中,你并没有重新定义total每次通过while循环,这是积累你期望的答案。