2013-10-30 35 views
-1

,我知道在Python中for環的結構如下:如何在Python中減去'for'循環計數器?

for i in range(10) 

,然後範圍實際上是[0,1,2,3,4,5,6,7,9]。現在這裏有一個問題,那就是我想通過放一條線i-=1來減少我的循環計數器,但是這並不顯示我期望的結果。

下面的例子是相同while(True)在例如結構Java和C,但在這裏它是有效的,循環中的計數器忽略了旨在減少它的行。

for i in range(10): 
    i-=1 
    print i 

及其產生的輸出:

-1 
0 
1 
2 
3 
4 
5 
6 
7 
8 

我應該怎麼做才能得到我想要的東西與for循環!我知道它可以通過一段時間輕鬆完成如下:

i=0 
while(i<10): 
    i-=1 
    print i 
    i+=1 

這裏是Java代碼作爲一個例子,我希望看到一個無限循環打印-1

下面是Java代碼:

import static java.lang.System.out; 

    public class HelloWorld{ 

     public static void main(String []args){ 
      for(int i=0;i<10;i++) 
      { 
       i--; 
       out.println(i); 
      } 
     } 
    } 
+5

使用while循環和你自己的櫃檯時,你想修改循環變量。 –

+1

我覺得這個問題可以解釋。請向我們展示您嘗試在Python中實現的Java或C循環。 – NPE

+0

什麼是您的實際當前代碼?預期產出是多少?你想做一個向後循環,還是你試圖修改循環(例如在某些條件下重複元素)? –

回答

4

range函數採用3個參數:啓動,停止,和步驟:

for i in range(-1, 9): 
    yield i 

要進入反向

for i in range(10, 0, -1): 
    yield i 

看一看的documentation

編輯:

當然,沒有什麼可以直接使用range阻止你。因此map(print, range(10, 0, -1))將把它們全部打印到屏幕上,而range(10, 0, -1)將讓你直接訪問整數。

+0

這給出了以下錯誤: 'yield i SyntaxError:'yield'outside function' – Cupitor

+0

@Naji That's correct。如果'yield'不嵌套在函數中,則會引發該錯誤。你也可以使用'range(10,0,-1)'plain。 – wheaties

+0

那麼這不是我之後...但是,謝謝 – Cupitor

2

爲什麼你試圖這樣做不會對蟒蛇工作的原因是因爲範圍返回一個整數一片。

>> range(10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

並且for語句迭代切片的每個元素。這裏是你試圖執行什麼:

for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]: 
    i = i - 1 
    print i 
0
>>> [e for e in xrange(10, 0, -1)] 
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 
+1

這是可怕的多餘。只要做'range(10,0,-1)'就可以完成這個任務。 – Hoopdady

2

不能修改這樣的迭代變量。這裏的for python更像一個foreach。

達到你想要你應該做這樣的我假設的行爲:

i = 0 
while (i<10): 
    i-=1 
    print i 
    i+=1 

雖然看起來有點傻比:

while(True): 
    print(-1)