이번 시간에는 Python 조건문에 대해 작성하도록 하겠습니다. 조건문은 크게 If문과 Switch 문으로 나뉩니다.
if문
은 if-elif-else
로 구성되어있으며, 특정 조건에서 어떤 task를 진행하면 되는지 명시를 하는 역할을 합니다. “만약 짝수라면 2로 나눠주고 홀수라면 1로 나눠줘”와 같이 말입니다.
if문
의 기본형식과 플로우차트입니다.
if 표현식
명령문
else
명령문
형식만 보고 감이 오지 않는 것은 정상입니다.
코드로 예시를 들어보겠습니다. 로직은 간단합니다. x가 y보다 크면 "You got the answer"이, 작으면 "Try again"을 출력하는 로직입니다.
x = 10
y = 5
if x > y:
print("You got the answer")
else:
print("Try again")
# 출력 : You got the answer
이번엔 기본 형식에 응용을 조금 해보겠습니다. 3가지 이상의 조건이 있을 때 유용하게 쓰이는 if-elif-else문
인데요, 어렵지 않습니다.
먼저 조건이 3가지인 경우입니다. x와 y가 같기 때문에 “You got the answer”가 나오는 로직입니다.
x,y = 5,5
if x > y:
print("Try again")
elif x == y:
print("You got the answer")
else:
print("Try again")
# 출력 : You got the answer
다음엔 조건이 3가지 이상인 경우엔 elif
구문을 추가로 작성하시면 됩니다.
score = 85
if score >= 90:
print("A등급입니다.")
elif score >= 80:
print("B등급입니다.")
elif score >= 70:
print("C등급입니다.")
elif score >= 60:
print("D등급입니다.")
else:
print("F등급입니다.")
파이썬은 가독성과 간결성이 중요한 언어입니다. 그러나 if문
을 썼을 때 코드가 다소 복잡해보이는 경우가 있습니다. 그럴 땐 Conditional Expression을 사용하기도 합니다.
이 또한 이름만 어렵지, 막상 사용해보면 어렵지 않습니다. 기본 형태입니다.
A If B else C
첫 번째 예시를 Conditional Expression으로 수정하면 아래와 같습니다.
x,y = 10,5
print("You got the answer" if x > y else "Try again")
조건이 하나가 아니라 여러개인 경우엔 어떻게 할까요? 예를 들어, 18세 이상의 성별을 분류하는 경우 말입니다.
그럴 땐, 중첩 if문
을 사용하면 쉽습니다.
if 조건1:
# 조건1이 참일 때 실행되는 코드
if 조건2:
# 조건1과 조건2 모두 참일 때 실행되는 코드
else:
# 조건1이 참이고, 조건2가 거짓일 때 실행되는 코드
else:
# 조건1이 거짓일 때 실행되는 코드
중첩 if문
은 다음과 같은 상황 에서 적용됩니다.
글만 보면 어려우니, 이해가 쉽도록 예시로 알아볼까요?
age = 20
gender = "Female"
if age >= 18:
if gender == "Female":
print("성인 여성입니다.")
else:
print("성인 남성입니다.")
else:
print("미성년자는 다음에 오십시오.")
중첩 if문
으로 복잡한 조건식을 표현할 수 있지만 주의사항이 있습니다. 깊은 중첩문은 코드의 가독성과 유지보수성을 크게 저해할 수 있는데요, 그럴 땐 함수를 사용하는 방법을 고려해야 합니다.
아래의 예시는 사용자의 인증 상태, 역할, 권한에 따라 다른 결과를 반환하는 코드입니다. 누가봐도 길고, 복잡해보이는 코드입니다.
def check_user_access(user):
if user.is_authenticated:
if user.role == "admin":
if user.has_permission("edit"):
return "편집 권한 있음"
else:
return "편집 권한 없음"
elif user.role == "user":
if user.has_permission("view"):
return "조회 권한 있음"
else:
return "조회 권한 없음"
else:
return "알 수 없는 역할"
else:
return "인증되지 않은 사용자"
아래는 함수로 리팩토링을 한 예시입니다.
check_permission
: 사용자가 특정 역할(role)에 속하고, 특정 권한(permission)을 가지고 있는지 확인하는 함수입니다.check_user_access
: 사용자에게 부여된 권한에 따라 다른 메시지를 반환하는 함수입니다.각 함수 별로 역할을 부여하고, 조건문을 처리하기 때문에 코드가 간결해지고, 유지보수도 쉬워집니다.
def check_permission(user, role, permission):
return user.is_authenticated and user.role == role and user.has_permission(permission)
def check_user_access(user):
if check_permission(user, "admin", "edit"):
return "편집 권한 있음"
elif check_permission(user, "admin", "view"):
return "조회 권한 있음"
elif user.is_authenticated:
return "권한 없음"
else:
return "인증되지 않은 사용자"
switch
문은 다수의 조건 중에서 하나를 선택하여 실행할 수 있는 제어문입니다. 주로 다양한 경우(case) 중에서 한 가지 경우를 선택하여 해당 경우에 맞는 코드를 실행할 때 사용됩니다.
파이썬은 switch문
을 지원하지 않지만, if-elif-else
문을 사용하여 비슷한 로직을 구현하거나, 사전(Dictionary)을 이용한 방식으로 switch
문과 유사한 기능을 구현할 수 있습니다.
def handle_cases(case):
if case == 'case1':
return "This is case 1"
elif case == 'case2':
return "This is case 2"
elif case == 'case3':
return "This is case 3"
else:
return "No case matched"
Python3.10
부터는 match
문이 도입되어 더 복잡한 패턴 매칭 기능을 제공합니다.
def match_example(case):
match case:
case 'case1':
return "This is case 1"
case 'case2':
return "This is case 2"
case 'case3':
return "This is case 3"
case _:
return "No case matched"
match
문은 다양한 패턴을 효과적으로 처리할 수 있으며, Python에서 switch
문의 역할을 대신하면서 더 강력한 기능을 제공합니다.