elif는 'else if'를 줄인 말로, if와 else 사이에 갈래를 더 놓습니다. 파이썬은 위에서부터 조건을 하나씩 보다가 처음 참인 갈래 하나만 실행하고, 그 아래 조건은 보지도 않습니다.
if·else로는 갈래가 둘뿐입니다. 주문 금액이 2만 원 이상이면 2,000원, 1만 원 이상이면 1,000원을 빼고 그 밖에는 빼지 않는 것처럼, 갈래가 셋 이상이면 elif를 씁니다.
갈래가 여럿이면 조건을 놓는 차례에 따라 결과가 달라집니다.
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)
10002번 줄 15000 >= 20000은 False라서 3번 줄을 건너뛰고 4번 줄로 갑니다.
4번 줄 15000 >= 10000이 True라서 5번 줄을 실행하고, else 갈래는 건너뛰어 8번 줄로 갑니다.
total이 달라지면 실행되는 갈래가 이렇게 바뀝니다.
total | 2번 줄 | 4번 줄 | 실행되는 줄 | 찍히는 값 |
|---|---|---|---|---|
| 25000 | True | 보지 않음 | 3번 | 2000 |
| 15000 | False | True | 5번 | 1000 |
| 9000 | False | False | 7번(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)1000else: 갈래는 늘 맨 끝이고, 갈래마다 들여 쓴 줄 하나가 붙습니다. 서로 바꿔도 되는 줄은 없습니다.
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를 넣어 보세요.
정답
C2번 줄 85 >= 70이 처음 참이라 grade는 'C'이고, 4~9번 줄의 남은 갈래는 보지 않고 10번 줄로 내려가 C를 찍습니다. 이 코드는 넓은 조건(70 이상)이 위에 있어서 'B'·'A' 갈래가 어떤 점수에서도 실행되지 않습니다.
흔한 오답은 B입니다. 85에 가장 잘 맞는 조건을 골라 실행한다고 본 것입니다.
아래 예제 코드의 8번 줄 elif sale:을 if sale:로 바꾸면 찍히는 줄을 봅니다.
처음 펼 때 약 6MB를 받습니다.컴퓨터에서 해 보기
파이썬 3.14. Tab을 누르면 다음 단추나 칸으로 갑니다. 들여쓰기는 빈칸 네 개입니다. Enter는 앞줄 들여쓰기를 잇고, 콜론 뒤에서는 한 단계 더 들여 씁니다. Ctrl+Enter로 실행합니다.
'실행'을 누르면 여기에 나옵니다.
여기서 쓴 코드 · 내 예상은 저장하지도 운영자에게 보내지도 않습니다. 페이지를 새로 열면 처음 코드입니다.