2011-08-11 69 views
15

工作我是一個新手,Python和目前正在學習流程控制命令,如ifelse其他與elif的語句沒有在Python

if語句工作都很好,但是當我寫elseelif命令,解釋器給我一個語法錯誤。我使用的是Python 3.2.1,並且它的本地解釋器和IDLE都出現了這個問題。

我跟着,因爲它在書中給出'A Byte Of Python'。如您所見,elifelse正在給出無效語法

>> number=23 
>> guess = input('Enter a number : ') 
>> if guess == number: 
>> print('Congratulations! You guessed it.') 
>> elif guess < number: 
    **(It is giving me 'Invalid Syntax')** 
>> else: 
    **(It is also giving me 'Invalid syntax')** 

這是怎麼發生的?我在IDLE和交互式Python中都遇到了這個問題。我希望語法是正確的。

enter image description here

+0

該語法對我來說看起來是正確的。你是在一個交互式的Python shell中輸入它,還是將它保存在一個文件中?你可以粘貼未經修改的腳本或交互式會話記錄嗎? – cdhowie

+0

elif/else是空的嗎?如果是,請添加「通過」。 – Jacob

+0

您可以粘貼REPL會話的*實際*完整輸出嗎?如果你沒有用「**(它給出'無效語法')**」 –

回答

21

看起來您在if聲明的正文之後輸入空行。這是交互式編譯器的一個提示,即完全使用該塊,因此它不期待任何elif/else塊。嘗試正好進入這樣的代碼,並且只打了每一行後進入一次

if guess == number: 
    print('Congratulations! You guessed it.') 
elif guess < number: 
    pass # Your code here 
else: 
    pass # Your code here 
+2

謝謝!它解決了我的問題。 :)你會說的沒有在我的書中給出。 – jayantr7

+3

對於這樣的測試,將所有內容寫入文本文件比使用'python mytest.py' – Simon

+0

@ jayantr7更容易:沒問題。請注意,如果您將其輸入到文件並通過python運行(如Simon所建議的那樣),那麼額外的換行符就不會出現問題;這是交互式解釋器特有的問題。 – cdhowie

1
if guess == number: 
    print ("Good") 
elif guess == 2: 
    print ("Bad") 
else: 
    print ("Also bad") 

確保你有你的identation權利。語法是好的。

2

elifelse必須立即遵循if塊的末尾,或Python將假設塊已經沒有他們關閉。

if 1: 
    pass 
      <--- this line must be indented at the same level as the `pass` 
else: 
    pass 

在你的代碼,解釋結束if塊時壓痕,所以elifelse沒有與它相關聯。因此他們被理解爲獨立的陳述,這是沒有道理的。


通常,請嘗試按照style guidelines,其中包括刪除過多的空白。

3

問題是你的elseelif之前鍵入的空行。注意你給的提示。如果它是>>>,那麼Python期待新語句的開始。如果它是...,那麼它期望您繼續以前的聲明。

2

在IDLE和交互式python中,您輸入了兩個連續的CRLF,它將您帶出if語句。 這是IDLE或交互式Python的問題。當你使用任何一種編輯器時,只要確保你的縮進是正確的就可以了。

0

除此之外,你的縮進是錯誤的。該代碼不會工作。 我知道你正在使用python 3.東西。 我正在使用python 2.7.3 這些代碼實際上對你所嘗試完成的工作是這樣的。

number = str(23) 
guess = input('Enter a number: ') 
if guess == number: 
    print('Congratulations! You guessed it.') 
elif guess < number: 
    print('Wrong Number') 
elif guess < number: 
    print("Wrong Number') 

唯一的區別我會告訴python這個數字是代碼工作的一個字符串。如果沒有的話會認爲是一個整數。當有人運行代碼時,他們輸入的字符串不是整數。有很多方法可以改變這個代碼,但這是我想提供的簡單解決方案,還有另一種我不能想到的方式,而不是將它們變成一個字符串。或者你可以把「23」放在引號中,或者你可以在輸入中使用int()函數。這將改變他們輸入的任何東西並整數。

0

請記住,默認情況下,輸入的返回值將是一個字符串而不是整數。您無法將字符串與<,>,=>,< =等布爾值比較(除非您比較長度)。因此,你的代碼應該是這樣的:

number = 23 
guess = int(input('Enter a number: ')) # The var guess will be an integer 

if guess == number: 
    print('Congratulations! You guessed it.') 

elif guess != number: 
    print('Wrong Number') 
0

Python可以生成即使IDENT爲「的elif」塊不匹配「如果」塊的ident(標籤爲先,以空間爲第二個相同的「無效的語法」錯誤或反之亦然)。