Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

3 if 조건문

Updated: 18 mrt 2026

논리식은 True 또는 False를 나타내는 표현식이며, if 조건문, while 반복문 등과 함께 활용되어 프로그램의 실행을 제어하는 매우 중요한 기능을 수행한다.

3.1기본 논리식

가장 단순한 논리식은 등식, 부등식 등의 비교 연산자를 이용한 표현식이다.

3 * 2 < 17 - 9
True
17 - 9 <= 3 * 2
False
5 == 4 + 1
True
3 + 2 ==  3 * 2
False
5 != 4 + 1
False
3 + 2 !=  3 * 2
True

보다 복잡한 논리식은 논리 연산자를 이용하여 만든다.

3.2논리 연산자

영어의 and, or, not 의 개념과 거의(!) 유사하게 작동하는 세 개의 논리 연산자를 이용하여 보다 복잡한 논리식을 구현할 수 있다.

연산 기호의미예시실행 결과
and그리고1==2 and 3==2+1False
or또는1==2 and 3==2+1True
not부정not 1==2True

논리 연산자 우선 순위

not, and, or 순으로 우순순위가 높다.

예를 들어

not a > b and b > c

(not a > b) and b > c

와 동일한 값을 표현하지만

not (a > b and b > c)

와는 아래 코드가 보여주듯이 일반적으로 서로 다른 값을 표현한다.

a = -23
b = -7
c = 1

print(not a > b and b > c)
print((not a > b) and b > c)
print(not (a > b and b > c))
False
False
True

자동 형변환

정수, 리스트, 문자열 등을 논리식에 바로 사용할 수 있다. 0, None, '', [] 등 없거나 비어있는 상태를 나타내는 값은 False로, 그 이외의 값은 True로 취급된다. 즉, 마치 bool() 형변환 함수가 적용된 것처럼 처리된다.

1 and False
False
0 or True
True
[1] and (1 < 0)
False
None or (1 < 0)
False

주의사항

andor 두 연산자는 영어 단어 and 와 or 와는 조금 다르게 작동한다. 예를 들어, 아래 코드를 실행하면 3/0 으로 인해 ZeroDivisionError 오류가 발생할 것으로 기대되지만 그렇지 않다.

(1 > 2) and 3/0
False

이유는 x and yx가 거짓이면 바로 False로 계산되기 때문이다. 즉 3/0이 나타내는 값을 아예 확인하지 않는다. 반면에 아래 코드는 3/0이 먼저 실행되어 오류를 발생시킨다.

3/0 and (1 > 2)
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
Cell In[29], line 1
----> 1 3/0 and (1 > 2)

ZeroDivisionError: division by zero

아래 코드는 or 연산자도 영어 단어 or와 조금 다르게 작동함을 보여준다. 이유는 x or yx가 참이면 y를 확인하지 않고 바로 True로 계산되기 때문이다. 즉, 3/0이 어떤 값을 나타내는지 아예 확인하지 않는다.

(1 <= 2) or 3/0
True

반면에 아래 코드를 실행하면 앞서 설명한 대로 오류가 발생한다.

3/0 or (1 <= 2)
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
Cell In[31], line 1
----> 1 3/0 or (1 <= 2)

ZeroDivisionError: division by zero

3.3조건문

컴퓨터 프로그램은 값을 저장하고 조작하여 새로운 값을 계산하여 활용하는 방법을 묘사한다. 이때 주어진 값에 따라 따라 다른 방법으로 일을 하도록 명령할 수 있다.

if ... 조건문

예를 들어 아래 코드는 파이썬을 좋아하는 경우에만 '안녕!'과 ‘파이썬 좋아요.’ 두 문자열이 출력되도록 한다.

love_python = True

if love_python:
    print("안녕!")
    print("파이썬 좋아요.")
안녕!
파이썬 좋아요.

if love_pythonlove_python이 참인지 여부를 확인하도록 하는 명령문이다. 그런데 1번 줄에서 love_python = True라고 작성되어 있기에 love_python이 참으로 확인되고, 따라서 들여쓰기된 print("안녕!")print('파이썬 좋아요.') 두 명령문이 차례대로 실행된다.

반면에 아래 코드를 실행하면 아무 것도 출력되지 않는다. 이유는 1번 줄에서 love_python이 거짓으로 확인되어 들여쓰기된 코드 블록이 실행되지 않기 때문이다.

love_python = False

if love_python:
    print("안녕!")
    print("파이썬 좋아요.")

if ... else ... 조건문

위 코드의 if lov_python 조건문에서 love_python이 거짓이어서 들여쓰기된 코드 블록이 실행되지 않았다. 그런데 그런 경우, 즉 if 다음이 거짓으로 판정될 때 실행되는 다른 코드 블록을 else 키워드를 이용하여 지정할 수 있다. 예를 들어 아래 코드는 파이썬을 좋아하지 않는 경우에 파이썬을 사랑해주면 행복진다는 문장을 출력한다.

love_python = False

if love_python:
    print("안녕!")
    print("파이썬 좋아요.")
else:
    print("파이썬을 사랑해주세요!")
    print("그러면 행복해집니다.")
파이썬을 사랑해주세요!
그러면 행복해집니다.

else 키워드 또한 콜론 기호 :로 끝나고 줄바꿈 후에 들여쓰기로 코드 블록을 지정함에 주의한다.

if ... elif ... else ... 명령문

참, 거짓 여부를 판단해야 하는 경우가 세 개 이상일 때 조건문에 elif 키워드를 추가로 사용한다. elif 키워드는 영어의 'else if’의 줄임말이며, 원하는 만큼 많이 사용할 수 있다. 예를 들어 아래 코드는 xy의 크기 비교를 위해 작을 때, 클 때, 같을 때 세 가지 경우로 판단한다.

x = -2
y = 3

if x < y:
    print('x가 y보다 작다')
elif x > y:
    print('x가 y보다 크다')
else:
    print('x와 y가 같다')
x가 y보다 작다

ifelif 문에 사용된 조건은 위에서부터 차례대로 확인되어 가장 먼저 참이되는 경우의 명령문이 실행되고 나머지 경우는 무시된다. 예를 들어 위 코드의 조건문은 다음 세 경우를 위에서부터 차례대로 처리한다.

  • x < y가 참인 경우

  • x < y가 거짓이면서 x > y가 참인 경우

  • x < yx > y 모두 거짓인 경우, 즉 x == y 가 참인 경우

이처럼 if ... elif ... else ... 에 사용된 논리식은 항상 이전의 논리식이 거짓임을 가정한다. 아래 코드는 y를 5로 나눈 나머지에 의존하여 서로 다른 명령문을 실행하도록 한다.

y = 4
x = y % 5

if x == 0:
    print('나머지가 0')
elif x == 1:
    print('나머지가 1')
elif x == 2:
    print('나머지가 2')
else:
    print('기타 등등')
기타 등등

elseelif는 용도가 다르다. else를 사용하지 않으면서 위 코드와 동일한 결과를 내려면 다음과 같이 작성해야 한다.

y = 4
x = y % 5

if x == 0:
    print('나머지가 0')
elif x == 1:
    print('나머지가 1')
elif x == 2:
    print('나머지가 2')
elif x == 3:
    print('기타 등등')
elif x == 4:
    print('기타 등등')
기타 등등

반면에 아래 코드는 동일한 결과를 내는 것처럼 보이지만 사실 기능이 다르다. y=4일 때는 결과가 동일하다.

y = 4
x = y % 5

if x == 0:
    print('나머지가 0')
elif x == 1:
    print('나머지가 1')
elif x == 2:
    print('나머지가 2')

print('기타 등등')
기타 등등

하지만 예를 들어 y=2인 경우엔 결과가 다르다.

y = 2
x = y % 5

if x == 0:
    print('나머지가 0')
elif x == 1:
    print('나머지가 1')
elif x == 2:
    print('나머지가 2')

print('기타 등등')
나머지가 2
기타 등등

이유는 마지막 줄의 print('기타 등등')이 위쪽의 if 조건문과 상관없이 항상 실행되기 때문이다. 반면에 이전 코드에서는 else 또는 elif의 경우에 해당되는 경우에만 '기타 등등’이 출력되었다.

중첩 조건문

사실 elif 키워드는 없어도 된다. 예를 들어 아래 코드는 주어진 두 값을 비교할 때 크거나, 작거나, 또는 같다의 세 경우를 다음과 같이 구분해서 처리한다.

  • if: x < y가 참인 경우 처리

  • else: x < y가 거짓인 경우. 따라서 x > yx == y 두 경우를 처리해야 함.

    • if: x < y가 거짓이라는 전제 하에 x > y가 참인 경우 처리

    • else: x < y가 거짓이라는 전제 하에 x == y가 참인 경우 처리

x = -2
y = 3

if x < y:
    print('x가 y보다 작다')
else:
    if x > y:
        print('x가 y보다 크다')
    else:
        print('x와 y가 같다')
x가 y보다 작다

그리고 많은 경우 논리 연산자를 활용하면 중첩 조건문을 굳이 사용하지 않아도 된다. 예를 들어 아래 코드는 중첩 조건문을 사용하여 x가 0보다 크면서 동시에 10보다 작은 경우를 다룬다.

x = 3

if 0 < x:
    if x < 10:
        print('x가 0보다 크고 동시에 10보다 작다.')
x가 0보다 크고 동시에 10보다 작다.

print() 함수가 0 < xx < 10 두 조건을 모두 만족하는 경우에만 실행되기에 아래와 같이 and 연산자를 이용할 수 있다.

x = 3

if 0 < x and x < 10:
    print('x가 0보다 크고 동시에 10보다 작다.')
x가 0보다 크고 동시에 10보다 작다.

참고로 0 < x and x < 100 < x < 10로 표현할 수 있다.

x = 3

if 0 < x < 10:
    print('x가 0보다 크고 동시에 10보다 작다.')
x가 0보다 크고 동시에 10보다 작다.