2016-11-25 50 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 –