if, elif, else문과 중첩 조건문
1. if - else
if-elif-else는 여러 조건을 순차적으로 검사하여 처음 참인 조건의 블록만 실행합니다. elif를 사용하면 조건을 중복 검사하지 않아 성능이 향상됩니다.if문을 사용하면 조건을 기반으로 서로 다른 코드 블록을 실행할 수 있습니다. 그러나 조건이 많아질수록 if문만으로는 코드를 효율적으로 관리하기 어렵습니다. 이러한 문제를 해결하기 위해, else문을 사용하여 if문의 조건이 거짓이거나 충족되지 않는 경우를 처리할 수 있습니다.
이제 if문과 else문을 활용한 기본적인 조건문의 구조를 살펴보겠습니다.
# if, else문의 기본구조
if 조건문: # 조건문을 확인해서 만약 '참'이면 if 문 다음에 문장들을 수행합니다.
pass # 수행할 문장 1
else: # if문의 조건이 거짓이면 else 문이 실행됩니다.
pass # 수행할 문장 2
if 문의 조건문을 확인해서 만약 참이면 수행할 문장 1 , 조건이 거짓이면 else 문이 실행되어 수행할 문장 2 가 수행됩니다.
x = 3
y = 1
if x > y:
print('첫 번째 값이 더 큽니다.')
else:
print('두 번째 값이 더 크거나 같습니다.')
2. if - elif - else
두 개의 조건만 있을 경우에는 if-else를 주로 활용하지만 세 개 이상의 여러 개의 조건을 한꺼번에 검사해야 할 경우에는 elif를 사용합니다. elif는 필요한 만큼 사용할 수 있습니다. 그리고 마지막에 else를 사용함으로써 조건에 대해서 마무리하게 됩니다.
# if, elif, else문의 기본구조
if 조건문1: # 조건문1을 확인해서 만약 '참'이면 if 문 다음에 문장들을 수행합니다.
pass # 수행할 문장 1
elif 조건문2: # 조건문1이 '참'이 아니고 조건문2가 '참'이라면 수행합니다.
pass # 수행할 문장 2
else: # 위 모든 if문, elif문의 조건이 '참'이 아니라면 수행합니다.
pass # 수행할 문장 3
위 코드에서 if나 elif문 뒤가 참이면 코드를 수행하고, 모두 거짓일 경우 else문을 출력합니다.
아래 성적을 입력받아 학점을 매기는 프로그램을 작성한다 생각해보겠습니다.
score = int(input("성적을 입력하세요 (0-100): "))
if score >= 90:
print("A")
elif 90 > score >= 80:
print("B")
elif 80 > score >= 70:
print("C")
elif 70 > score >= 60:
print("D")
else:
print("F")
위 코드는 아래와 같이 변경할 수 있습니다.
score = int(input("성적을 입력하세요 (0-100): "))
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
elif score >= 60:
print("D")
else:
print("F")
이미 첫 번째 코드에서 False라는 것은 그 아래 점수는 90점 미만이라는 의미가 내포되어 있기 때문입니다.
아래에 있는 예제를 통하여 좀 더 알아보겠습니다. score에 따라 용돈을 받는 코드입니다.
score = 81
money = 0
if score >= 90:
money += 1000000
elif score >= 80:
money += 100000
elif score >= 70:
money += 10000
elif score >= 60:
money += 1000
else:
money = 0
print(money) # 출력: 100000
위 구문에서 elif로 되어 있는 부분을 모두 if로 바꿔보도록 하겠습니다.
score = 81
money = 0
if score >= 90:
money += 1000000
if score >= 80:
money += 100000
if score >= 70:
money += 10000
if score >= 60:
money += 1000
else:
money = 0
print(money) # 출력: 111000
매번 if문에 걸리기 때문에 용돈을 111,000원 받게 됩니다. 또한 매번 if 뒤에 조건을 검사하니 코드의 성능도 떨어집니다. 그렇다면 아래처럼 범위를 모두 명시하면 어떻게 될까요? 결과를 예상하고 실행해보세요.
score = 81
money = 0
if score >= 90:
money += 1000000
if 90 > score >= 80:
money += 100000
if 80 > score >= 70:
money += 10000
if 70 > score >= 60:
money += 1000
else:
money = 0
print(money)
10만 원이 나올 것 같지만 결과는 0입니다. 두 번째 if에서 money가 100000이 되긴 했지만, 마지막 else가 바로 앞의 if 70 > score >= 60에 붙어 있기 때문입니다. 81은 이 조건을 만족하지 않으므로 else가 실행되어 money를 0으로 되돌려버립니다.
elif로 이어진 조건들은 하나의 덩어리라서 else가 전체를 받아주지만, if를 나열하면 각각이 독립된 문장이 되어 else는 마지막 if 하나만 상대합니다. 조건이 서로 배타적일 때 elif를 써야 하는 이유가 여기에 있습니다.
elif와 else 단독으로는 사용할 수 없으며, elif는 if가 있어야만, else는 if, elif나 뒤에서 배울 for, while이 있어야만 사용할 수 있습니다.
score = 100
else:
print('hello') # error
3. 중첩 if - elif문 사용하기
중첩 조건문은 조건문 안에 또 다른 조건문을 포함하는 것으로, 코드의 흐름을 다양한 경로로 분기시킬 수 있게 합니다.
# if를 중첩해서 사용하기
movie = {
'영화': '레미제라블',
'장르': '드라마',
'서비스': '디즈니',
'비용': 15000,
'평점': 4.9
}
if movie['장르'] == '드라마':
if movie['서비스'] == '디즈니' or movie['서비스'] == '넷플릭스':
if movie['평점'] >= 4.5:
if movie['비용'] <= 20000:
print('영화시청') # 출력: 영화시청
이렇게 중첩되어 있는 조건문은 and를 사용하여 아래와 같이 변경할 수 있습니다.
# if를 중첩해서 사용하기
# 간략해진 것 맞나요?
movie = {
'영화': '레미제라블',
'장르': '드라마',
'서비스': '디즈니',
'비용': 15000,
'평점': 4.9
}
if movie['장르'] == '드라마' and (movie['서비스'] == '디즈니' or movie['서비스'] == '넷플릭스') and movie['평점'] >= 4.5 and movie['비용'] <= 20000:
print('영화시청') # 출력: 영화시청
다만 이렇게 하였을 경우 가독성이 안 좋아진 것을 한 눈에 파악할 수 있습니다. 따라서 and로 if 조건을 묶을 경우 의미와 맥락을 파악하여 적절한 곳에서 묶어 가독성을 높여야 합니다.
movie = {
'영화': '레미제라블',
'장르': '드라마',
'서비스': '디즈니',
'비용': 15000,
'평점': 4.9
}
if movie['장르'] == '드라마':
if movie['서비스'] == '디즈니' or movie['서비스'] == '넷플릭스':
if movie['평점'] >= 4.5 and movie['비용'] <= 20000:
print('영화시청') # 출력: 영화시청
중첩된 조건문에서는 elif, else을 모두 사용할 수 있습니다.
movie = {
'영화': '레미제라블',
'장르': '드라마',
'서비스': '왓챠',
'비용': 15000,
'평점': 4.9
}
if movie['장르'] == '드라마':
if movie['서비스'] == '디즈니' or movie['서비스'] == '넷플릭스':
if movie['평점'] >= 4.5 and movie['비용'] <= 20000:
print('영화시청')
else:
print(movie['서비스'] + ' 구독하기!') # 출력: 왓챠 구독하기!
여기서 else가 어느 if에 붙어 있는지 들여쓰기로 확인해주세요. 서비스를 확인하는 두 번째 if와 같은 깊이에 있으므로, 장르는 드라마가 맞지만 서비스가 디즈니나 넷플릭스가 아닐 때 실행됩니다.