'else if'의 올바른 구문은 무엇입니까?


284

저는 2.6.4에서 3.1.1로 도약하는 새로운 Python 프로그래머입니다. 'else if'문을 사용하려고 할 때까지 모든 것이 잘되었습니다. 해석기가 이해할 수없는 이유로 'else if'의 'if'다음에 구문 오류가 발생합니다.

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

function(input('input:'))

아마도 아주 간단한 것을 놓치고있을 것입니다. 그러나 나는 스스로 답을 찾을 수 없었습니다.


3
나는 이것이 2.6.4에서 작동하지 않는다고 생각한다.
wRAR

실제로, 파이썬 구문과 의미론의이 요소는이 버전들 사이에서 변하지 않았습니다. 아마 전혀.
Mike Graham

파이썬에서 if / else에 대한 좋은 튜토리얼로 시작할 수 있습니다. dreamsyssoft.com/python-scripting-tutorial/ifelse-tutorial.php
Triton Man

답변:


444

파이썬에서 "else if"는 "elif"로 표기됩니다.
또한 elif및 뒤에는 콜론이 필요 합니다 else.

간단한 질문에 대한 간단한 답변. 처음 시작할 때 (마지막 몇 주 동안) 같은 문제가있었습니다.

따라서 코드는 다음과 같아야합니다.

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

function(input('input:'))

11
걱정하지 마십시오. 우리 모두는 언젠가 배워야합니다. 파이썬이 그런 elphisise를 가독성에 놓은 다음 elkif 대신 다른 것을 사용한다는 것이 이상합니다. python API 매뉴얼을 항상 열어 두는 것이 좋습니다. docs.python.org/3.1 중요한 링크는 Tutorial입니다 : docs.python.org/3.1/tutorial/index.html 언어 참조 : docs.python.org/3.1/reference /index.html 라이브러리 참조 : docs.python.org/3.1/library/index.html
Lyndon White

1
Perl은 동일한 키워드를 사용하며, 그 이유는 이전 else 문 작성을 잊어 버리고 다른 if 문 작성을 시작하는 사고를 방지하기위한 것입니다. 분명히 C 코드를 작성하는 동안 일반적인 문제였습니다.
Nate Glenn

1
@NateGlenn Perl은 실제로을 사용합니다 elsif. 파이썬이 문자보다 효율적 이어야한다고 생각 합니다. "Elif"는 #elif파이썬 AFAICT 오래 전에 사용 된 C 전 처리기에서 시작된 것으로 보입니다 . 이 문맥에서 단일 토큰 지시어를 갖는 것은 가치가 있습니다. 파싱 #else if <code>#else <code that could theoretically even be an if statement>멍청한 구문을 복잡하게 만들었 기 때문입니다.
FeRD


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

10

옛날부터 if/else if파이썬에서 올바른 구문 은 elif입니다. 그건 그렇고, if/else.eg 가 많으면 사전을 사용할 수 있습니다

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

msw의 경우 사전을 사용하여 함수를 실행하는 예입니다.

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.
S.Lott

@ s.lott, OP의 경우는 간단합니다. 그가 a의 많은 값을 확인해야한다면, 사전은 더 깔끔합니다. 당신은 그것을 사용하지 않는 습관을 만들 수 있지만, 나는 그것을 사용하고 있으며 많은 if / else를 코딩하는 것 보다이 접근법을 더 좋아합니다. 심지어 사전을 사용하여 함수를 실행합니다.
ghostdog74

1
@ ghostdog : 사전을 사용하여 함수를 실행할 있다는 것을 알고 있지만 계산 된 gotos 또는 Tcl 문자열을 붙여 붙여 넣는 것처럼 생각 exec합니다. 이것이 좋은 습관입니까? 예를 들어 줄 수 있습니까?
msw

@ msw : 아주 좋은 연습입니다. 예 : 간단한 스크래핑 연습이 아닌 다른 요소 태그에 대해 서로 다른 처리를 수행해야하는 XML 스트림을 읽는 중입니다. 예를 들어 Excel 2007 스프레드 시트 파일은 여러 XML 문서로 구성되어 있으며 일부는 매우 복잡합니다. 각 태그마다 별도의 방법이 있습니다. 사전을 통해 발송합니다. 두려워 할 것이 없습니다. 처리 방법 <foo>do_foo인 경우 앱을 시작할 때 즉시 받아쓰기를 구축 할 수도 있습니다.
John Machin

1
사전에는 .get기본값을 지정할 수 있는 방법이 있습니다. 첫 번째 예제는 다음과 같이 작성할 수 있습니다.print d.get(a, "3a")
codeape

4

다음은 함수를 약간 리팩토링 한 것입니다 ( "else"또는 "elif"는 사용하지 않음).

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

@ ghostdog74 : Python 3에는 "print"에 괄호가 필요합니다.


python 3은 python 2의 print 문을 필요한 괄호로 바꾸어 sys.stdout.write
Dan D.

2
한다 ('1', '2'), 연산 문자열 사용
priestc

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

다음과 같이 수정해야합니다.

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

보시다시피, elif로 변경 해야하는 경우 '2'뒤에 콜론이 있어야하고 else 문 뒤에 새 줄이 있어야하며 인쇄와 괄호 사이의 공백을 닫아야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.