2016-09-23 83 views
-4

我開始用Python大約幾周的時間學習編程 ,我遇到了一些麻煩。 下面的代碼是一個小程序,檢查是否有一個即使在列表編號,如果找到的第一個偶數,它打破了循環:if/else while循環內部的縮進

numbers = [1, 3, 5] 
position = 0 

while position < len(numbers): 
    number = numbers[position] 
    if number % 2 == 0: 
     print('Found even number', number) 
     break 
    position += 1 

    else: # break not called 
    print('No even number found') 

,打印錯誤:

File "test.py", line 11 
    else: # break not called 
    ^
SyntaxError: invalid syntax 

那「而」程序運行得很好是一個壓痕問題,如果我之前的「其他」等與對齊去除標籤:

while position < len(numbers): 
    number = numbers[position] 
    if number % 2 == 0: 
     print('Found even number', number) 
     break 
    position += 1 

else: 
    print('No even number found') 

# Prints: No even number found 

我的問題是,爲什麼「ELS e'需要與'while'對齊,而不是與循環內的'if'對齊?

這就是我想認識的人! Thanx提前!

+0

'position + = 1'沒有正確縮進。 – Li357

+0

@AndrewL。難道它不是真的需要縮進嗎? – baranskistad

+0

@bjskistad沒有一直讀完這個問題,不確定OP是否想在if/else之外擁有'position + = 1'。是的,在其他地方縮進打印電話。 – Li357

回答

1

當您刪除您使用的同時縮進:else塊。其他人正在附加,而這意味着如果你的條件爲假,它將運行。

while True: 
    ##some looping code 
else: 
    ##code to run when while is false 

當您將該行代碼縮進時,將附加的其他元素縮進到if:else塊中。在這種情況下,如果if爲false,則執行其他操作。

if True: 
    ##code to run if true 
else 
    ##code to run if false 

python中的代碼塊遵循相同的縮進。因爲「else」是「while」塊的一部分,所以它必須位於同一個tab位置才能工作,並查看代碼,我會說while:else塊是你的意圖。 :)

+2

布爾值在Python中大寫:) – Li357

+0

所以他們是。我會爲此編輯。謝謝。 –

+1

如果在while循環中永遠不會執行break,那麼'while:... else:'塊中的'else:'塊將會運行,這與您的描述不同。 – cco

1

嘗試這樣的:

numbers = [1, 3, 5] 
position = 0 

while position < len(numbers): 
    number = numbers[position] 
    if number % 2 == 0: 
     print('Found even number', number) 
     break 
    else: # break not called 
     print('No even number found') 
    position += 1 
1

這是問題所在。在這種情況下,有兩種類型的else陳述。如果您將else語句與while對齊,則while循環的條件變爲false時將執行else語句。

在您的代碼中,else語句在position < len(numbers)不正確時得到執行。

而且,因爲你有ifelse語句之間的代碼行,這是position += 1

如果你想使用else聲明爲您if聲明(不適用於while語法問題剛剛出現聲明,正如我在開始時所建議的那樣),您應該在ifelse之間移動這一行代碼。

試試這個:

while position < len(numbers): 
    number = numbers[position] 
    if number % 2 == 0: 
     print('Found even number', number) 
     break 
    else: 
     print('No even number found') 
    position += 1 

希望這有助於。

+0

這也是伎倆,謝謝你! – CodeAddicted

+0

當然! @CodeAddicted – codemirel