2015-07-20 323 views
1

背景信息:我目前正在完成從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://stackoverflow.com/questions/291978/short-description-of-python-scoping-rules) – jycr753

+1

它實際上與範圍無關。每個循環都具有實質上不同的內容。 – TigerhawkT3

回答

1

在你的第一個代碼塊,每次運行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 

隨着每次通過循環,總遞增和利用。在第一個中,你將在每個循環中寫下總數。

0

當您在while循環中定義total時,它會在每次循環時將其自身重新分配到0 + end,在程序結束時爲1。在外部定義它時,它將total設置爲0,然後對於while中的每個循環,它將繼續向其添加值。

另外,你可以寫total = total + end作爲total += end,它意味着同樣的事情,但實際上是(非常)快一點。

1

問題在於total = 0 + end。這樣做是將當前值end分配給total。由於end最終變成1,這就是總數。您需要添加end到運行total

total = total + end 

或:

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

total while循環中的例子中,它是被每次end != 0重新定義,並正在打印後立即end是等於1(end = end-1將使斷裂你出while循環結束後等於1)。

在另一個例子中,你並沒有重新定義total每次通過while循環,這是積累你期望的答案。