이전 포스트에서 if문으로 조건이 참일 때 코드를 실행하는 방법을 배웠습니다. 하지만 실제 프로그래밍에서는 "조건이 참일 때"와 "거짓일 때"를 모두 처리해야 하는 경우가 많습니다. 이번 포스트에서는 else와 elif를 사용하여 완벽한 분기 처리(branching)를 하는 방법을 알아보겠습니다.
if만 사용하면 조건이 거짓일 때를 처리하기 번거롭습니다.
age = 15
if age >= 18:
print('성인입니다')
if age < 18: # 반대 조건을 다시 작성
print('미성년자입니다')
else는 if 조건이 거짓일 때 실행됩니다.
age = 15
if age >= 18:
print('성인입니다')
else:
print('미성년자입니다')
실행 결과:
미성년자입니다
if 조건식:
# 조건이 참일 때 실행
코드1
else:
# 조건이 거짓일 때 실행
코드2
핵심 규칙:
1. else 뒤에 조건식 없음
2. else: 끝에 콜론(:) 필수
3. else와 if는 들여쓰기 깊이가 같아야 함
4. else 본문도 들여쓰기 4칸
# 올바른 예
if True:
print('if 블록')
else:
print('else 블록')
# 잘못된 예 - 에러!
if True:
print('if 블록')
else: # 들여쓰기가 다름 - IndentationError!
print('else 블록')
시각화:
if 조건: (0칸)
코드A (4칸 - if 본문)
코드B (4칸 - if 본문)
else: (0칸 - if와 같은 깊이)
코드C (4칸 - else 본문)
코드D (4칸 - else 본문)
age = 20
if age >= 18:
print('성인입니다')
else:
print('미성년자입니다')
print('프로그램 종료')
흐름:
age >= 18 조건 확인
↓
True일 때 → '성인입니다' 출력 → '프로그램 종료' 출력
False일 때 → '미성년자입니다' 출력 → '프로그램 종료' 출력
number = int(input('숫자를 입력하세요: '))
if number % 2 == 0:
print(f'{number}는 짝수입니다')
else:
print(f'{number}는 홀수입니다')
실행 결과 (입력: 7):
숫자를 입력하세요: 7
7는 홀수입니다
password = input('비밀번호를 입력하세요: ')
correct_password = 'python123'
if password == correct_password:
print('로그인 성공!')
print('환영합니다!')
else:
print('비밀번호가 틀렸습니다')
print('다시 시도해주세요')
score = int(input('점수를 입력하세요: '))
if score >= 60:
print('합격입니다!')
print(f'당신의 점수: {score}점')
else:
print('불합격입니다')
print('재시험을 준비하세요')
a = 10
b = 20
if a > b:
print(f'최대값: {a}')
else:
print(f'최대값: {b}')
실행 결과:
최대값: 20
파이썬에서 0은 False, 그 외의 모든 숫자는 True로 평가됩니다.
if 0:
print('실행되지 않음')
else:
print('0은 False입니다')
실행 결과:
0은 False입니다
# 양수
if 1:
print('1은 True입니다')
# 음수
if -1:
print('-1도 True입니다')
# 실수
if 3.14:
print('3.14도 True입니다')
# 큰 숫자
if 100:
print('100도 True입니다')
모두 실행됩니다!
count = int(input('개수를 입력하세요: '))
if count: # count가 0이 아니면
print(f'{count}개가 있습니다')
else: # count가 0이면
print('개수가 0입니다')
실행 결과 (입력: 0):
개수를 입력하세요: 0
개수가 0입니다
숫자뿐 아니라 다른 자료형도 참/거짓으로 평가됩니다.
# False
if False:
print('실행 안 됨')
else:
print('False는 거짓')
# 0
if 0:
print('실행 안 됨')
else:
print('0은 거짓')
# 빈 문자열
if '':
print('실행 안 됨')
else:
print('빈 문자열은 거짓')
# 빈 리스트
if []:
print('실행 안 됨')
else:
print('빈 리스트는 거짓')
# None
if None:
print('실행 안 됨')
else:
print('None은 거짓')
# True
if True:
print('True는 참')
# 0이 아닌 숫자
if 1:
print('1은 참')
# 비어있지 않은 문자열
if 'Hello':
print('문자열이 있으면 참')
# 비어있지 않은 리스트
if [1, 2, 3]:
print('리스트에 요소가 있으면 참')
elif(else if의 줄임말)는 여러 조건을 순차적으로 확인할 때 사용합니다.
score = 75
if score >= 90:
print('A')
else:
if score >= 80:
print('B')
else:
if score >= 70:
print('C')
else:
print('F')
중첩이 깊어져서 읽기 어렵습니다.
score = 75
if score >= 90:
print('A')
elif score >= 80:
print('B')
elif score >= 70:
print('C')
else:
print('F')
실행 결과:
C
훨씬 간결하고 읽기 쉽습니다!
if 조건1:
# 조건1이 참일 때
코드1
elif 조건2:
# 조건1이 거짓이고 조건2가 참일 때
코드2
elif 조건3:
# 조건1, 2가 거짓이고 조건3이 참일 때
코드3
else:
# 모든 조건이 거짓일 때
코드4
핵심 규칙:
1. elif는 if와 else 사이에 위치
2. elif는 여러 개 사용 가능
3. else는 선택사항 (없어도 됨)
4. 위에서부터 순차적으로 검사, 참인 조건을 만나면 나머지는 무시
score = 85
if score >= 90:
print('A')
elif score >= 80: # 이 조건이 참 → 실행하고 종료
print('B')
elif score >= 70: # 검사하지 않음
print('C')
else: # 실행하지 않음
print('F')
실행 결과:
B
흐름:
1. score >= 90 → 85 >= 90 → False
2. score >= 80 → 85 >= 80 → True → 'B' 출력 후 종료
3. 나머지 elif와 else는 검사하지 않음
score = int(input('점수를 입력하세요: '))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f'학점: {grade}')
실행 결과 (입력: 85):
점수를 입력하세요: 85
학점: B
month = int(input('월을 입력하세요 (1-12): '))
if month >= 3 and month <= 5:
season = '봄'
elif month >= 6 and month <= 8:
season = '여름'
elif month >= 9 and month <= 11:
season = '가을'
elif month == 12 or month == 1 or month == 2:
season = '겨울'
else:
season = '잘못된 입력'
print(f'{month}월은 {season}입니다')
실행 결과 (입력: 7):
월을 입력하세요 (1-12): 7
7월은 여름입니다
weight = float(input('체중(kg): '))
height = float(input('키(m): '))
bmi = weight / (height ** 2)
if bmi < 18.5:
status = '저체중'
elif bmi < 23:
status = '정상'
elif bmi < 25:
status = '과체중'
else:
status = '비만'
print(f'BMI: {bmi:.2f}')
print(f'상태: {status}')
age = int(input('나이를 입력하세요: '))
if age < 0:
print('잘못된 입력입니다')
elif age < 8:
print('유아')
elif age < 14:
print('초등학생')
elif age < 17:
print('중학생')
elif age < 20:
print('고등학생')
elif age < 65:
print('성인')
else:
print('노인')
else는 필수가 아닙니다. 모든 조건이 거짓일 때 아무것도 하지 않아도 된다면 생략할 수 있습니다.
score = 50
if score >= 90:
print('A')
elif score >= 80:
print('B')
elif score >= 70:
print('C')
# else가 없으므로 아무것도 출력되지 않음
실행 결과:
(아무것도 출력 안 됨)
if-else 안에 또 다른 if-else를 넣을 수 있습니다.
age = 25
has_ticket = True
if age >= 18:
print('성인 확인 완료')
if has_ticket:
print('티켓 확인 완료')
print('입장 가능합니다')
else:
print('티켓이 없습니다')
print('티켓을 구매해주세요')
else:
print('미성년자는 입장 불가합니다')
실행 결과 (age=25, has_ticket=True):
성인 확인 완료
티켓 확인 완료
입장 가능합니다
# 좋은 예 (대부분 성인이라면)
if age >= 18:
print('성인')
else:
print('미성년자')
# 나쁜 예
if age < 18:
print('미성년자')
else:
print('성인')
# 나쁜 예 (읽기 어려움)
if (age >= 18 and has_ticket and not is_banned) or is_vip:
print('입장 가능')
# 좋은 예 (읽기 쉬움)
is_adult = age >= 18
can_enter_normally = is_adult and has_ticket and not is_banned
can_enter = can_enter_normally or is_vip
if can_enter:
print('입장 가능')
함수에서는 조건에 맞지 않으면 바로 반환하는 것이 좋습니다.
def check_age(age):
# 나쁜 예
if age >= 18:
return '성인'
else:
return '미성년자'
# 좋은 예
if age >= 18:
return '성인'
return '미성년자'
# 잘못된 코드
if score >= 90:
print('A')
elif: # SyntaxError: 조건식 필요
print('B')
# 올바른 코드
if score >= 90:
print('A')
elif score >= 80:
print('B')
# 잘못된 코드
if score >= 90:
print('A')
else score >= 80: # SyntaxError
print('B')
# 올바른 코드
if score >= 90:
print('A')
elif score >= 80:
print('B')
# 잘못된 예 (70 이상이면 모두 C)
score = 85
if score >= 70: # 85 >= 70 → True, 여기서 종료
print('C')
elif score >= 80: # 검사 안 함
print('B')
# 올바른 예 (큰 값부터 검사)
if score >= 90:
print('A')
elif score >= 80:
print('B')
elif score >= 70:
print('C')