2016-04-22 56 views
0

我想列出一個數字範圍,我正在使用「for i in range(start,stop,step)」。我在範圍內(開始,停止,步驟)Python 3

def range(): 
    P=36 
    for i in range(P+1,0,-1): 
     P=P-4 
     print(P) 

我想列出數字降到0,但它一直到-112。

我發現,如果我這樣做,雖然:

def test(): 
    P=36 
    for i in range(P+1,28, -1): 
     P=P-4 
     print(P) 

這將現在0.1 停止可能有人請解釋爲什麼它這一點,並不會真的在0停下來?對不起,我是新來的,我很困惑。我也想上市就能結果進行事後稱,像結果串聯起來,形成一個多邊形線,但不能簡單地寫

list(P) 

,而不是print(P)

+0

你的第一個例子應該引發TypeError,因爲你用你的自定義函數覆蓋'range',所以它會自動調用它自己,並且這不起作用,因爲不同參數號。在第二個例子中,縮進被打破了。 –

回答

0

發生了什麼事是使用範圍,在開始時創建一個從36到0的列表,併爲37次循環做一次。如果您在循環中更改循環次數,您的var P將不再影響循環次數。

在你的第一個情況下,你將有36-37*4 = -112

在你的第二個情況下,你有你的循環執行9次這就是爲什麼你會得到0 36 -9*4 = 0 :)

嘗試使用的xrange應該爲每個值循環,我認爲它會停在0

2

要創建36列表0中的4個步驟倒計時,您只需使用內置的range功能直接:

l = list(range(36,-1,-4)) 
# result: [36, 32, 28, 24, 20, 16, 12, 8, 4, 0] 

停止值爲-1,因爲循環從起始值(包括)運行到停止值(不包括)。如果我們使用0作爲停止值,則最後的列表項將是4.

或者如果您更喜歡for循環,例如,因爲你想打印裏面的變量:

for P in range(36,-1,-4): 
    print(P)