Conditionals (조건문)

감자·2024년 4월 2일
0

TIL Python

목록 보기
8/16
post-thumbnail

이번 시간에는 Python 조건문에 대해 작성하도록 하겠습니다. 조건문은 크게 If문과 Switch 문으로 나뉩니다.

If문

if문if-elif-else 로 구성되어있으며, 특정 조건에서 어떤 task를 진행하면 되는지 명시를 하는 역할을 합니다. “만약 짝수라면 2로 나눠주고 홀수라면 1로 나눠줘”와 같이 말입니다.

1) if - else

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

2) if-elif-else

이번엔 기본 형식에 응용을 조금 해보겠습니다. 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등급입니다.")

3) Conditional Expression : 조건표현식

파이썬은 가독성과 간결성이 중요한 언어입니다. 그러나 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")

4) 중첩 if문

조건이 하나가 아니라 여러개인 경우엔 어떻게 할까요? 예를 들어, 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 "인증되지 않은 사용자"

아래는 함수로 리팩토링을 한 예시입니다.

  1. check_permission : 사용자가 특정 역할(role)에 속하고, 특정 권한(permission)을 가지고 있는지 확인하는 함수입니다.
  2. 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문

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문의 역할을 대신하면서 더 강력한 기능을 제공합니다.

profile
감자와 함께 떠나는 프로그래밍 여행

0개의 댓글