2010-03-07 144 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