2010-03-07 142 views
198

我是一位正在從2.6.4飛躍到3.1.1的新Python程序員。一切都很好,直到我試圖使用'else if'語句。由於我無法理解的原因,解釋器在'else if'中的'if'之後給我一個語法錯誤。'else if'的正確語法是什麼?

def function(a): 
    if a == '1': 
     print ('1a') 
    else if a == '2' 
     print ('2a') 
    else print ('3a') 

function(input('input:')) 

我可能錯過了很簡單的東西;但是,我一直無法自己找到答案。

+2

我認爲這不適用於2.6.4。 – wRAR 2010-03-07 05:38:10

+0

的確,這些Python語法和語義元素在這些版本之間並沒有改變。可能永遠不會。 – 2010-03-07 07:56:16

+0

你可以從python中if/else的好教程開始:http://www.dreamsyssoft.com/python-scripting-tutorial/ifelse-tutorial.php – 2013-01-10 14:05:12

回答

333

在Python中,「else if」拼寫爲「elif」。
另外,在elifelse之後需要冒號。

簡單的回答一個簡單的問題。當我第一次開始時(在過去幾周),我遇到了同樣的問題。

所以,你的代碼應該閱讀:

def function(a): 
    if a == '1': 
     print('1a') 
    elif a == '2': 
     print('2a') 
    else: 
     print('3a') 

function(input('input:')) 
+5

不用擔心,我們都需要學習一段時間。 我覺得python把這樣的elphisise放在可讀性上,然後去使用elkif而不是它。 我建議您隨時打開python API手冊:http://docs.python.org/3。1/ 重要鏈接是 教程:http://docs.python.org/3.1/tutorial/index.html 語言參考:http://docs.python.org/3.1/reference/index.html Library參考資料:http://docs.python.org/3.1/library/index.html – 2010-03-07 10:37:27

+1

Perl使用相同的關鍵字,其基本原理是爲了防止您忘記完成前一個else語句的寫作並且開始編寫另一個語句如果聲明。顯然這是編寫C代碼時常見的問題。 – 2015-10-06 23:54:55

14

你的意思elif

10
def function(a): 
    if a == '1': 
     print ('1a') 
    elif a == '2': 
     print ('2a') 
    else: 
     print ('3a') 
8

自古以來,爲if/else if在Python正確的語法是elif。順便說一句,你可以使用字典,如果你有很多的if/else .eg

d={"1":"1a","2":"2a"} 
if not a in d: print("3a") 
else: print (d[a]) 

城市生活垃圾,例如使用字典執行功能。

def print_one(arg=None): 
    print "one" 

def print_two(num): 
    print "two %s" % num 

execfunctions = { 1 : (print_one, ['**arg']) , 2 : (print_two , ['**arg'])} 
try: 
    execfunctions[1][0]() 
except KeyError,e: 
    print "Invalid option: ",e 

try: 
    execfunctions[2][0]("test") 
except KeyError,e: 
    print "Invalid option: ",e 
else: 
    sys.exit() 
+1

你可以,但請不要這樣做。字典不是一個'elif'的好替代品。 – 2010-03-07 05:09:54

+0

@ s.lott,OP的情況很簡單。如果他必須檢查a的許多值,那麼字典更加整潔。你可能會習慣於不使用它,但我一直在使用它,並且我喜歡這種方法比編碼許多if/else更好。哎呀,我甚至使用字典來執行功能。 – ghostdog74 2010-03-07 05:27:42

+1

@ghostdog:我知道你*可以*使用字典來執行函數,但是這個想法讓我害怕像計算得到的gotos或者粘貼Tcl字符串並且執行它們。這是好的做法嗎?你能舉出一個例子嗎? – msw 2010-03-07 05:35:22

2

這裏是你的函數的一個小重構(它不使用 「其他」 或 「ELIF」):

def function(a): 
    if a not in (1, 2): 
     a = 3 
    print(str(a) + "a") 

@ ghostdog74:Python 3的要求括號 「打印」。

+0

python 3用一個函數替換了python 2的print語句,因此需要括號,如果你想這樣做,以及只是使用sys.stdout.write – 2010-08-26 14:07:58

+2

應該是'('1','2')',操作使用字符串 – priestc 2011-12-20 16:23:44

-4

Python 3.x有一些變化,這意味着一些python2.7程序可能無法正常工作。

我知道這個答案可能會遲到,但它指出了一些事情。

Python 3.x的相當於else if已被縮小到elif。 這意味着所有else if代碼現在必須是elif

這這裏有一個例子:

print ("Hello! Type a letter. (a for adding, s for subtracting)") 
answer = input() 
if answer = "a": 
adding() #This would lead to a define, e.g def adding(): 

elif answer = "b": 
subtracting() #This would lead to a define, e.g def adding(): 

else: 
print ("Invalid selection!") 

這縮小稍微,使分揀出來的東西要容易得多。

+2

其在Python 2.5,2.6和2.7中稱爲ELIF以及...所以這不是真正的新對於python 3.x,已經在現有的答案中陳述了...此外,您的條件需要使用==而不是= ...更不用說您缺少的縮進。 – Dyrborg 2015-03-15 21:01:32

+0

即使python 1也有elif:https://docs.python.org/release/1.6/tut/node6.html#SECTION006100000000000000000 – 2016-05-03 10:20:48