2016-03-17 177 views
0

我不知道爲什麼蟒蛇會顯示此行爲:修改範圍變量

for x in range(5): 
    print "Before: ",x 
    if x<3: 
     x-=1 
    print "After: ",x 

我得到的輸出:

Before: 0 
After: -1 
Before: 1 
After: 0 
Before: 2 
After: 1 
Before: 3 
After: 3 
Before: 4 
After: 4 

我沒想到它改變在第一次迭代中我將其減小到-1之後,x的值爲1。 或者,當我想要更改範圍變量的值時,是否有辦法實現所需的行爲?

謝謝。

+0

也許你應該通過改變範圍變量的值來解釋你試圖解決什麼問題。 – ekhumoro

+0

我想你想要一個'while'循環。 –

回答

1

A for在Python中循環並不關心當前值x(與大多數C語言不同),當它開始下一次迭代時;它只是記住範圍中的當前位置並分配下一個值。爲了能夠操作循環變量,你需要使用一個while循環,它不會對任何變量施加任何控制(它只是評估你給它的條件)。

+0

你能詳細說明while循環的方法嗎?我的for循環回答工作正常 –

3

我不知道爲什麼會蟒顯示此行爲

因爲x復位循環的每次迭代。

如果你想修改的範圍內,需要將其先保存到變量,然後修改

my_range = range(5) # [0, 1, 2, 3, 4] 
for i,x in enumerate(my_range): 
    print "Before: ", my_range[i] 
    if x < 3: 
     my_range[i] = x-1 
    print "After: ", my_range[i] 

print my_range # [-1, 0, 1, 3, 4] 
0
for x in range(5): 

是一樣的:

for x in [0, 1, 2, 3, 4]: 
每個

循環迭代x從列表中獲取新值,它不能用作C,C#,Java,javascript,...通常對於,I a格力與@ aasmund-eldhuset,循環會做得更好,你想要的。