python

Python 제어문 – 조건문

cinnamonbrown 2026. 5. 26. 19:35

Python의 조건문은 프로그램의 실행 흐름을 제어하기 위한 문법이다.

1. if, elif, else

1.1 if문

if, elif, else 문은 조건식의 결과가 True인지 False인지에 따라 실행되는 코드가 달라진다.

if 조건:
    실행할 코드

 

조건은

  • True 또는 False로 평가될 수 있는 식이여야 한다
  • 조건이 True로 평가되면, if 문 바로 아래의 코드 블록이 실행되고, 그렇지 않으면 해당 블록은 건너 뛴다.

 

 

▶︎ 파이썬에서 False로 취급되는 값은 다음과 같다.

  • 비어있는 collection( list, tuple ,set, dictionary)
  • 0
  • None
  • False
    그 외의 값들은 대부분 True로 취급된다.

이 부분은 조건문을 작성할 때 꼭 염두에 두는 것이 좋다.


1.2 else 문

else 문은 앞의 조건이 충족되지 않았을 때 실행할 코드 블록을 정의할 때 사용한다.

 

if 조건:
    코드 블록1
else:
    코드 블록2

 

 

예를 들어 age 값이 6이라면 if문의 조건식은 거짓이 된다.

따라서 if문 아래의 코드는 실행되지 않고, else문 아래의 코드가 실행된다.


✔️ 왈러스 연산자 ( := )

왈라스 연산자는 파이썬에서 값을 할당하면서 동시에 그 값을 표현식 안에서 사용할 수 있게 해주는 문법이다.

 

정식 명칭은 할당 표현식(assignment expression)이다.

 

이 연산자를 사용하면 값을 한 번 계산해서 변수에 저장하고, 그 값을 바로 조건식 안에서 활용할 수 있다.

 

 

 

왈러스 연산자를 사용하지 않으면 보통 위와  같이 먼저 값을 변수에 저장해야 한다.

 

하지만 왈러스 연산자를 사용하면 다음처럼 작성할 수 있다.

 

기존 방식에서는 len(text)의 결과를 사용하기 위해 length = len(text)라는 코드를 따로 작성해야 했다.

하지만 왈러스 연산자를 사용하면 값을 저장하는 것과 조건을 검사하는 것을 한 번에 처리할 수 있다.

 

사실 아직은 코드가 짧아서 이 문법의 장점이 크게 와닿지는 않았다.

그래도 나중에 조건문 안에서 같은 값을 여러 번 사용해야 하는 상황이 생긴다면, 코드를 조금 더 간결하게 작성하는 데 도움이 될 것 같다.


1.3 elif 문

elif는 if-else 구조에서 추가적인 조건을 검사하기 위해 사용한다.

 

중요한 점은 if-elif-else 구조에서는 여러 조건 중 처음으로 참이 되는 하나의 코드 블록만 실행된다는 것이다.

if 조건1:
    코드 블록1
elif 조건2:
    코드 블록2
elif 조건3:
    코드 블록3
else:
    코드 블록4

 

예를 들어 다음과 같은 상황이라고 해보자.

  • 조건1 : False
  • 조건2 : True

인 상황이라고 가정해보자.

 

 

이 경우 조건1이 거짓이므로 다음 조건인 조건2를 검사한다.


조건2가 참이므로 코드 블록2만 실행하고, 이후의 조건3은 더 이상 검사하지 않는다.

 

elif를 사용할 때 알아둘 점은 다음과 같다.

  • elif는 if 없이 단독으로 사용 ❌
  • elif는 필요에 따라 여러 번 사용될 수 🅾️
  • else는 선택적으로 사용
  • 사용될 경우, 항상 if나 elif 뒤에 나타나야 한다.

예시를 살펴보자

  • age > 19 → False
  • age > 14 → True

👉 age > 14에 해당하는 코드 블록만 실행되고 조건문을 빠져나온다.


2. if 여러 개 쓰기 vs if ~ elif ~ else 쓰기

 

이 부분은 수업을 들으면서 강사님께서 강조하셨던 부분이다.

 

겉으로 보기에는 비슷해 보여도, if를 여러 개 쓰는 것과 if-elif-else를 쓰는 것은 다르게 동작한다.

 

여기서 한 번 더 짚고 넘어가보자면

  • elif주어진 여러 조건 중에서 처음으로 참이 되는하나의 조건만 실행되는 코드이다.
  • 반면 if는 여러 개의 조건문을 사용하면 각각의 조건을 모두 따로 검사한다.

예를 들어, score이 85일 때


① 왼쪽 (if ~ elif ~ els) 코드에서는 score >=80조건이 참이므로 해당 코드 블록만 실행하고 조건문을 빠져나온다.

② 반면, 오른쪽 (if 여러 번 사용) 코드에서는 score >= 80 조건도 검사하고, 그 아래에 있는 score >= 70 조건도 다시 검사한다. 즉, 조건이 여러 개 참이라면 여러 코드 블록이 실행될 수 있다.


3. 조건부 표현식 (Conditional Expression)

조건부 표현식(Conditional Expression)은 조건의 참(True)과 거짓(False)에 따라 값을 선택하는 한 줄짜리 조건문이다.

 

간단한 분기 로직을 간결하게 표현할 때 유용하다.

 조건이 참인 경우 값 if 조건 else 조건이 거짓인 경우 값

 

일반적인 if-else문으로 작성한 코드를 조건부 표현식으로 바꾸면 더 간결하게 표현할 수 있다.

간단한 조건문일 때는 조건부 표현식을 사용하면 코드가 더 간결해 보인다.


하지만 조건이 복잡하거나 여러 줄의 처리가 필요한 경우에는 일반적인 if문을 사용하는 것이 더 적절하다.
특히 elif까지 필요한 상황이라면 굳이 조건부 표현식으로 억지로 줄이기보다는, 일반 조건문으로 작성하는 편이 더 읽기 좋다.


4. 구조적 패턴 매칭

파이썬에서 if-elif-else구문을 좀 더 간결하고 읽기 쉽게 만든 새로운 분기문이다.

이는 Java/C의 switch-case와 비슷하지만 훨씬 더 강력한 기능을 가진다.

match 값:
    case 패턴1:
        실행할 코드1
    case 패턴2:
        실행할 코드2
    case _:
        기본 실행 코드 (default)

 

여기서 _(언더바) 는 어떤 case에도 매칭되지 않았을 때 실행되는 기본값처럼 사용할 수 있다.
if-else문의 else와 비슷한 역할이라고 보면 된다.

 

처음에는 match-case문이 딱 정해진 값에 따라 분기할 때만 쓰이는 문법이라고 생각했다.

그리고 범위 조건이 필요할 때는 if문이 더 적절하다고 생각했다.

 

그런데 case 뒤에 if 조건을 함께 붙이면, match-case문에서도 범위 기준으로 분기할 수 있다.


 

예제 1

예를 들어 user가 다음과 같은 튜플 형태라고 해보자.
이 값을 match-case문으로 분기할 수 있다.

 

 

여기서 user(name, age) 형태의 튜플이다.

 

 

case는 먼저 튜플의 구조가 맞는지 확인하고,

 

그 다음 뒤에 붙은 if 조건을 검사한다.

 


내가 헷갈렸던 부분은 case가 여러 개 있으면 조건에 맞는 것을 계속 찾아서 여러 개 실행하는 줄 알았다는 점이다.

하지만 match-case문은 위에서부터 차례대로 검사하다가, 처음으로 매칭되는 하나의 case만 실행하고 바로 종료된다.

if-elif-else문과 비슷하게 동작한다고 생각하면 될 거 같다.


예제 2

match-case 문에서 유의해야 할 점이 있다.


👉 리스트와 튜플은 서로 다른 타입이지만, 구조적 패턴 매칭에서는 둘 다 시퀀스 패턴으로 취급될 수 있다.

👉 타입을 명확히 구분하려면 list(), tuple() 패턴을 사용해야 한다.


예제 2.1

 

👉 scores=[95,88,76] ⇨ case ① 에 해당


예제 2.2


👉 scores=(95,88,76) ⇨ case ① 에 해당 (∵ 튜플과 리스트 비슷하게 매칭)


예제 2.3

 

여기서 _는 “아무 값이나 와도 된다”는 의미이다.


하지만 이것이 “값이 없어도 된다”는 뜻은 아니다.
즉 _ 는 아무 값이나 하나 들어와도 되지만, 반드시 그 자리는 있어야 한다는 의미이다.


예제 3

앞에서 본 것처럼 match-case문에서는 리스트와 튜플이 시퀀스 패턴으로 비슷하게 매칭될 수 있다.
만약 리스트와 튜플을 명확히 구분하고 싶다면 list()tuple() 패턴을 사용할 수 있다.

 

👉 이렇게 작성하면 단순히 원소의 구조만 보는 것이 아니라, 실제 타입까지 구분해서 분기할 수 있다.