2016-11-25 88 views
2

地方,我需要編寫代碼,就像下面我解決一個問題:這蟒蛇for循環和if語句都舉止怪異

c = [0,0,1,0,0,1,0] 
for i in range(7): 
    if(i<7-2 and c[i+2] == 0): 
     i += 1 
    print(i) 

我預計這樣的輸出:

0 
2 
3 
5 
6 

但我正在此:

0 
2 
3 
3 
5 
5 
6 

但在C相同的邏輯/代碼,它工作正常...

#include<stdio.h> 
int main(){ 
    int c[] = {0,0,1,0,0,1,0}; 
    int i; 
    for(i=0;i<7;i++){ 
     if(i<7-2 && c[i+2] == 0){ 
      i++; 
     } 
     printf("%d\n",i); 
    } 
} 

是什麼原因或什麼我在這裏失蹤?

回答

2

A for i in range(7) python循環表現爲for i in [0,1,2,3,4,5,6]i是該列表中的值,而不是遞增的索引。因此,你的i += 1不會做你認爲它做的事。

您可以使用while循環來獲得與c for循環相同的行爲,但是可能會有更多pythonic方法來編寫它。

i = 0 
while i < 7: 
    if(i<7-2 and c[i+2] == 0): 
     i += 1 
    print(i) 
    i+=1 
+0

非常感謝...:d –

1

的for-in循環中,輪到範圍內的每個成員只分配給i,它不增加i。因此,您對i所做的任何修改在循環當前迭代結束時都會丟失。

你可以得到一個while循環所需的行爲,但你不得不增加i自己:

i = 0 
while i < 7: 
    if(i<7-2 and c[i+2] == 0): 
     i += 1 
    print(i) 
    i += 1 
+1

非常感謝...:d –