본문으로 건너뛰기

elif로 여러 갈래

파이썬 목차조건레슨 16 / 59

목차

elif는 'else if'를 줄인 말로, if와 else 사이에 갈래를 더 놓습니다. 파이썬은 위에서부터 조건을 하나씩 보다가 처음 참인 갈래 하나만 실행하고, 그 아래 조건은 보지도 않습니다.

if·else로는 갈래가 둘뿐입니다. 주문 금액이 2만 원 이상이면 2,000원, 1만 원 이상이면 1,000원을 빼고 그 밖에는 빼지 않는 것처럼, 갈래가 셋 이상이면 elif를 씁니다. 갈래가 여럿이면 조건을 놓는 차례에 따라 결과가 달라집니다.

9단계 중 1단계. 1번 줄: total을 25000에 붙입니다.

1위에서부터 보다가 처음 참인 갈래로

elif 조건:은 if 줄과 같은 꼴이고, if와 같은 칸에 씁니다. elif는 몇 개든 둘 수 있습니다. else는 맨 끝에 하나만 두거나 아예 두지 않습니다.

실행은 if 줄부터 조건을 하나씩 계산합니다. False면 그 덩어리를 건너뛰고 다음 elif 줄로 갑니다. 처음 True가 나온 갈래의 덩어리를 실행하면, 남은 갈래는 조건도 계산하지 않고 모두 건너뜁니다. 모든 조건이 False면 else 덩어리를 실행합니다(규칙 4).

total = 15000
if total >= 20000:
    discount = 2000
elif total >= 10000:
    discount = 1000
else:
    discount = 0
print(discount)
실행 결과
1000

2번 줄 15000 >= 20000은 False라서 3번 줄을 건너뛰고 4번 줄로 갑니다. 4번 줄 15000 >= 10000이 True라서 5번 줄을 실행하고, else 갈래는 건너뛰어 8번 줄로 갑니다. total이 달라지면 실행되는 갈래가 이렇게 바뀝니다.

total2번 줄4번 줄실행되는 줄찍히는 값
25000True보지 않음3번2000
15000FalseTrue5번1000
9000FalseFalse7번(else)0

갈래가 몇 개든 실행되는 덩어리는 많아야 하나입니다. else가 없으면, 모든 조건이 거짓일 때 아무 덩어리도 실행되지 않습니다.

2조건의 차례가 결과를 바꾼다

25000원은 2만 원 이상이기도 하고 1만 원 이상이기도 합니다. 1절 코드의 금액을 25000으로 하고 두 조건의 차례를 바꾸면 무엇이 찍힐까요? 답을 정한 뒤 펼쳐 보세요.

total = 25000
if total >= 10000:
    discount = 1000
elif total >= 20000:
    discount = 2000
else:
    discount = 0
print(discount)
실행 결과 보기
실행 결과
1000

예상과 다르면 그곳이 배울 곳입니다. 파이썬은 더 잘 맞는 갈래를 찾지 않습니다. 위에서부터 보다가 처음 True가 된 2번 줄의 갈래 하나만 실행하고, 4번 줄은 계산하지도 않습니다(규칙 4).

'1만 원 이상'이라는 넓은 조건은 '2만 원 이상'이라는 좁은 조건을 감쌉니다. 2만 원 이상인 금액은 모두 1만 원 이상이기도 하기 때문입니다. 그래서 넓은 조건을 위에 두면, 그 아래 좁은 조건의 갈래는 어떤 금액에서도 실행되지 않습니다. 조건이 서로 감싸면 좁은 조건부터 위에 놓습니다.

3if를 여럿 쓰면 따로따로 본다

elif 대신 if를 여러 번 쓰면, if마다 따로 선 조건이라서 참인 갈래가 모두 실행됩니다.

total = 25000
if total >= 20000:
    print('2,000원 할인')
if total >= 10000:
    print('1,000원 할인')
실행 결과
2,000원 할인
1,000원 할인

할인이 둘 다 붙었습니다. 갈래 가운데 하나만 골라야 하면 둘째 if를 elif로 씁니다.

total = 25000
if total >= 20000:
    print('2,000원 할인')
elif total >= 10000:
    print('1,000원 할인')
실행 결과
2,000원 할인

따로 선 if는 앞 갈래와 상관없이 그 줄에 왔을 때 조건을 새로 계산합니다. elif는 위 조건이 모두 거짓일 때만 계산합니다.

4오류: else if라고 쓰면

다른 프로그래밍 언어에서는 else if라고 쓰기도 하지만, 파이썬에서는 elif 한 낱말입니다.

total = 25000
if total >= 20000:
    print(total)
else if total >= 10000:
    print(total)
실행 결과
  File "main.py", line 4    else if total >= 10000:         ^^SyntaxError: expected ':'

맨 아래 줄 expected ':'는 콜론이 와야 할 자리라는 뜻이고, ^^가 4번 줄의 if를 가리킵니다. 파이썬은 else 바로 뒤에 콜론을 기다렸는데 if가 왔습니다. else if를 elif로 고칩니다.

예제

갈래를 고르는 코드 '고르기'는 조건 세우기 → 갈래마다 할 일 → 갈래 뒤 공통 세 걸음으로 쓰고, 걸음마다 주석 머리줄을 답니다.

total = 25000
# 1. 조건 세우기
big = total >= 20000
sale = total >= 10000
# 2. 갈래마다 할 일
if big:
    discount = 2000
elif sale:
    discount = 1000
else:
    discount = 0
# 3. 갈래 뒤 공통
pay = total - discount
print(f'낼 돈 {pay:,}원')
실행 결과
낼 돈 23,000원
  • 1. 조건 세우기: 조건의 값에 먼저 이름을 붙입니다. big은 '2만 원 이상인가', sale은 '1만 원 이상인가'입니다. 25000원이면 둘 다 True입니다. big·sale처럼 True·False 하나에 붙어 갈래를 고르는 데 쓰는 이름을 깃발이라고 부릅니다.
  • 2. 갈래마다 할 일: 좁은 조건의 깃발 big을 먼저 봅니다. 갈래마다 discount를 할인 금액에 붙입니다.
  • 3. 갈래 뒤 공통: 들여 쓰지 않은 줄은 어느 갈래를 지났든 실행되어 낼 돈을 찍습니다.

자주 틀리는 곳

틀린 생각: if·elif는 조건을 다 본 뒤 가장 잘 맞는 갈래를 고른다.

사람은 70세라면 '성인'보다 더 들어맞는 '경로'를 고르므로, 파이썬도 그렇게 고르리라 여기게 됩니다. 그러나 파이썬은 위에서부터 조건을 보다가 처음 참인 갈래에서 멈춥니다.

age = 70
if age >= 20:
    print('성인')
elif age >= 65:
    print('경로')
실행 결과
성인

70세는 첫 조건 age >= 20에서 이미 참이라 성인을 찍고, elif 줄의 조건은 계산하지도 않습니다. 65세 이상이면 모두 20세 이상이므로, 이 차례로는 경로가 찍히는 사람이 없습니다.

맞는 규칙: elif는 위에서부터 처음 참인 갈래 하나만 실행합니다. 그래서 서로 감싸는 조건은 좁은 것부터 놓습니다(규칙 4).

틀린 생각: if를 여럿 이어 써도 elif처럼 갈래 하나만 실행된다.

if 줄이 위아래로 붙어 있으면 한 묶음의 갈래처럼 보입니다. 그러나 if마다 따로 선 조건이라, 95점에 등급이 둘 찍힙니다.

score = 95
if score >= 90:
    print('A')
if score >= 80:
    print('B')
실행 결과
A
B

맞는 규칙: 따로 선 if는 앞 갈래와 상관없이 그 줄에서 조건을 새로 계산하므로, 참인 덩어리가 모두 실행됩니다. 갈래 가운데 하나만 골라야 하면 둘째부터 elif로 잇습니다(규칙 4).

틀린 생각: elif는 줄인 말이라 else if로 풀어 써도 된다.

elif는 'else if'를 줄인 말이고, 다른 프로그래밍 언어에서는 else if로 쓰기도 합니다. 그러나 파이썬에서 else if로 쓰면 4절처럼 SyntaxError: expected ':'⁠가 납니다.

맞는 규칙: 파이썬의 else는 조건을 받지 않아 바로 뒤에 콜론이 와야 합니다. 갈래를 더 놓을 때는 elif 한 낱말로 씁니다.

확인 문제

1. 예제의 total을 20000으로 바꿨습니다. 무엇이 찍히는지 그대로 쓰세요.

total = 20000
# 1. 조건 세우기
big = total >= 20000
sale = total >= 10000
# 2. 갈래마다 할 일
if big:
    discount = 2000
elif sale:
    discount = 1000
else:
    discount = 0
# 3. 갈래 뒤 공통
pay = total - discount
print(f'낼 돈 {pay:,}원')
힌트

'1. 조건 세우기'에서 total의 값을 넣었을 때 두 깃발이 무엇으로 접히는지부터 보세요.

정답
실행 결과
낼 돈 18,000원

20000 >= 20000이라 big이 True이고, sale도 True입니다. 6번 줄 if big:이 먼저 참이라 discount는 2000이고, elif 줄은 계산하지 않습니다.

흔한 오답은 낼 돈 19,000원입니다. >= 연산자를 '보다 크다'로 읽어 big을 False로 본 것입니다.

2. 2만 원 이상이면 2,000원에, 1만 원 이상이면 1,000원에, 그 밖에는 0원에 discount를 붙이려 합니다. '2. 갈래마다 할 일'에 들어갈 여섯 줄이 섞여 있습니다. 들여쓰기는 맞게 적었습니다.

㉠     discount = 1000
㉡ elif sale:
㉢ else:
㉣ if big:
㉤     discount = 0
㉥     discount = 2000

여섯 줄은 아래 코드의 # 2. 갈래마다 할 일 바로 아래에 들어갑니다.

total = 15000
# 1. 조건 세우기
big = total >= 20000
sale = total >= 10000
# 2. 갈래마다 할 일
# 3. 갈래 뒤 공통
print(discount)

여섯 줄의 차례를 기호로 쓰고, 다 맞춘 코드가 무엇을 찍는지도 쓰세요.

힌트

'2. 갈래마다 할 일' — 갈래 머리(if·elif·else)를 위에서부터 놓고, 머리마다 그 갈래의 할인 금액 줄을 붙입니다.

놓은 뒤 물음

다 맞춘 코드가 두 깃발을 그 차례로 보는 까닭은 무엇일까요?

  • ① 2만 원 이상이면 sale도 True라서, sale을 먼저 보면 2,000원 갈래에 닿지 못하기 때문
  • ② 파이썬이 가장 잘 맞는 갈래를 골라 주므로 결과는 같고, 읽기 좋으라고 큰 금액부터 쓰기 때문
  • ③ 참인 갈래가 모두 실행되므로, 큰 할인을 먼저 붙인 뒤 작은 할인을 더해야 하기 때문
정답

㉣ ㉥ ㉡ ㉠ ㉢ ㉤ 차례이고, 까닭은 ①입니다. 다 맞춘 코드는 1000을 찍습니다.

total = 15000
# 1. 조건 세우기
big = total >= 20000
sale = total >= 10000
# 2. 갈래마다 할 일
if big:
    discount = 2000
elif sale:
    discount = 1000
else:
    discount = 0
# 3. 갈래 뒤 공통
print(discount)
실행 결과
1000

else: 갈래는 늘 맨 끝이고, 갈래마다 들여 쓴 줄 하나가 붙습니다. 서로 바꿔도 되는 줄은 없습니다.

25000원이면 big과 sale이 모두 True입니다. 처음 참인 갈래 하나만 실행되므로 sale을 먼저 보면 2,000원 갈래는 실행되지 않습니다.

  • ② 파이썬이 가장 잘 맞는 갈래를 찾아 준다고 본 것입니다. 2절처럼 차례를 바꾸면 결과가 달라집니다.
  • ③ elif를 따로 선 if 여럿처럼 본 것입니다. elif 갈래는 위 조건이 모두 거짓일 때만 실행됩니다(규칙 4).

3. 성적에 등급을 매기는 코드입니다. 무엇이 찍히는지 쓰세요.

score = 85
if score >= 70:
    grade = 'C'
elif score >= 80:
    grade = 'B'
elif score >= 90:
    grade = 'A'
else:
    grade = 'F'
print(grade)
힌트

2번 줄의 조건부터 score의 값 85를 넣어 보세요.

정답
실행 결과
C

2번 줄 85 >= 70이 처음 참이라 grade는 'C'이고, 4~9번 줄의 남은 갈래는 보지 않고 10번 줄로 내려가 C를 찍습니다. 이 코드는 넓은 조건(70 이상)이 위에 있어서 'B'·'A' 갈래가 어떤 점수에서도 실행되지 않습니다.

흔한 오답은 B입니다. 85에 가장 잘 맞는 조건을 골라 실행한다고 본 것입니다.

아래 예제 코드의 8번 줄 elif sale:을 if sale:로 바꾸면 찍히는 줄을 봅니다.

처음 펼 때 약 6MB를 받습니다.컴퓨터에서 해 보기

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

파이썬 목차로