2013-11-27 23 views
0

首先,我想道歉,如果這個問題的標題是混亂如果使用while,範圍(0,30)不以0開始。 Python的

for i in range(0,30): 
    while i: 
     print i   
     break 

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 

爲什麼沒有從0開始?如果我不使用'while i',只是打印我。 。 。它按照預期從0開始。 while循環做了一些奇怪的事情。發生什麼事?爲什麼不打印0

回答

3

while 0等於while False。如果你想打印0,檢查它實際上是一個0

for i in range(0,30): 
    while i: # while 0 == while False, so it just skips to next value 
     print i   
     break 

for i in range(0,30): 
    while i is not False: # False == 0 but False is not 0 
     print i   
     break 
+0

有沒有什麼辦法來解決這個問題? –

+1

@ draconisthe0ry:你爲什麼想要?無論如何,你的while循環沒有做任何事情。 – BrenBarn

+0

這是一個更復雜的簡化。基本上我正在做的是從特定位置的幾個列表中的幾個子列表中獲取值 –

0

也許是因爲while需要一個布爾值,所以它不會與一個去。 0評估爲假,所以不符合條件。

2

range(0,30)確實開始以零,這只是因爲你已經使用,只知道自己,行while i:一些奇怪的原因,它會導致虛假的時候i爲零。因此,雖然範圍本身產生的價值,你選擇忽略它。

相反,如果你使用:

for i in range(0,30): 
    while True: 
     print i   
     break 

,或者更好的,沒有完全while

for i in range(30): 
    print i   

,你會發現它按預期工作。

0

因爲這樣:

while 0: 
    print 'hello' 

不會打印出任何東西。

如果你真的想在0打印,以及可以代替檢查它是否是INT:

for i in range(0,30): 
    while isinstance(i,int): 
     print i   
     break