Skip to main content

지난 장에서는 input()으로 값을 받고, print()로 결과를 보여 주는 법을 배웠습니다. 이제 프로그램은 사람의 말을 들을 수 있게 되었지요. 그런데 듣기만 하고 늘 똑같이 대답한다면 조금 심심합니다.

이번 장에서는 프로그램이 상황에 따라 다른 행동을 하게 만드는 방법을 배웁니다. 바로 조건문입니다. 조건문을 배우고 나면 프로그램이 마치 "생각하는 것처럼" 보이기 시작합니다. 비가 오면 우산을 챙기라고 말하고, 점수가 높으면 합격을 알려 주고, 숫자가 음수인지 양수인지도 구분할 수 있습니다.1

조건문은 프로그램의 갈림길이다

조건문은 말 그대로 조건을 보고 길을 고르는 문장입니다.

예를 들어 이런 상황을 떠올려 봅시다.

  • 비가 오면 우산을 챙긴다.

  • 비가 오지 않으면 그냥 나간다.

  • 시험 점수가 90점 이상이면 A를 준다.

  • 아니면 다른 기준을 다시 본다.

사람은 이런 판단을 너무 자연스럽게 합니다. 파이썬에서는 그 역할을 if, elif, else가 맡습니다.

조건문을 이해하는 가장 쉬운 방법은 이렇게 생각하는 것입니다.

"만약 이 조건이 맞으면 이 코드를 실행해."

여기서 조건은 결국 참(True) 또는 거짓(False) 으로 판별됩니다.1

가장 기본: if

가장 단순한 조건문은 if입니다.

if 조건:
    실행할 코드

읽는 방법도 쉽습니다.

"만약 조건이 참이면, 아래 코드를 실행한다."

예를 들어 숫자가 양수인지 확인해 봅시다.

number = int(input("숫자를 입력하세요: "))

if number > 0:
    print("양수입니다.")

사용자가 10을 입력하면 number > 0은 참이므로 양수입니다.가 출력됩니다. 하지만 -3을 입력하면 조건이 거짓이라서, 아무것도 출력되지 않습니다.1

여기서 중요한 점이 하나 있습니다. if 아래에 있는 코드는 들여쓰기가 되어 있습니다. 파이썬은 이 들여쓰기로 "어디까지가 조건문 안쪽인지"를 구분합니다.3

들여쓰기는 보기 좋으라고만 있는 것이 아니다

파이썬에서 들여쓰기는 장식이 아니라 규칙입니다. 보통 공백 4칸을 사용합니다.13

age = 20

if age >= 18:
    print("성인입니다.")
    print("투표할 수 있습니다.")

print("프로그램이 끝났습니다.")

위 코드에서 if 안쪽의 두 줄은 조건이 참일 때만 실행됩니다. 하지만 마지막 줄은 들여쓰기가 없으므로 조건과 상관없이 항상 실행됩니다.

이 차이는 아주 중요합니다. 초보자는 종종 이렇게 실수합니다.

age = 20

if age >= 18:
print("성인입니다.")

이 코드는 오류가 납니다. 파이썬은 if 다음에 어떤 코드가 조건문 안에 들어가는지 들여쓰기로 판단하기 때문입니다.

파이썬은 중괄호 {} 대신 들여쓰기를 쓴다고 생각하면 이해가 쉽습니다. 덕분에 코드가 깔끔해지지만, 대신 들여쓰기를 대충 하면 바로 혼이 납니다.

조건에는 보통 비교가 들어간다

조건문 안에는 주로 비교 연산자가 들어갑니다. 비교 연산자는 두 값을 비교해서 참 또는 거짓을 만들어 냅니다.2

  • == : 같다

  • != : 같지 않다

  • > : 크다

  • < : 작다

  • >= : 크거나 같다

  • <= : 작거나 같다

예를 들어:

score = 85

if score >= 80:
    print("잘했어요!")

여기서 score >= 80은 참이므로 문장이 출력됩니다.

초보자가 많이 헷갈리는 부분도 있습니다. 같다를 검사할 때는 =가 아니라 ==를 써야 합니다.

name = "민지"

if name == "민지":
    print("이름이 민지입니다.")

=는 값을 저장할 때 쓰고, ==는 같은지 비교할 때 씁니다. 둘은 완전히 다른 역할입니다.

두 갈래로 나누기: if else

어떤 조건이 참일 때와 거짓일 때를 모두 처리하고 싶다면 else를 붙이면 됩니다.

if 조건:
    참일 때 실행할 코드
else:
    거짓일 때 실행할 코드

예를 들어 짝수와 홀수를 구분해 봅시다.

number = int(input("숫자를 입력하세요: "))

if number % 2 == 0:
    print("짝수입니다.")
else:
    print("홀수입니다.")

%는 나머지를 구하는 연산자입니다. number % 2 == 0은 "2로 나누었을 때 나머지가 0인가?"를 묻는 뜻입니다.

이 코드는 아주 공평합니다. 참이면 if 쪽을 실행하고, 거짓이면 else 쪽을 실행합니다. 둘 중 하나는 반드시 실행됩니다.

선택지가 여러 개라면: elif

세 가지 이상 경우를 나누고 싶다면 elif를 씁니다. elif는 "else if", 즉 "앞 조건이 아니라면, 이 조건을 다시 보자"라는 뜻입니다.1

if 조건1:
    코드1
elif 조건2:
    코드2
else:
    코드3

예를 들어 숫자의 상태를 세 가지로 나눌 수 있습니다.

number = int(input("숫자를 입력하세요: "))

if number > 0:
    print("양수입니다.")
elif number < 0:
    print("음수입니다.")
else:
    print("0입니다.")

이 코드는 아주 중요한 특징이 있습니다. 위에서부터 차례대로 검사하고, 처음으로 참이 된 한 블록만 실행합니다.1

그래서 조건의 순서가 중요합니다.

elif에서는 순서가 성적표보다 중요할 때도 있다

다음 코드를 봅시다.

score = int(input("점수를 입력하세요: "))

if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
else:
    print("D")

이 코드는 잘 동작합니다. 95점이면 첫 번째 조건에서 바로 A가 출력됩니다.

그런데 순서를 바꾸면 문제가 생길 수 있습니다.

score = int(input("점수를 입력하세요: "))

if score >= 70:
    print("C")
elif score >= 80:
    print("B")
elif score >= 90:
    print("A")
else:
    print("D")

이제 95점을 입력해도 첫 조건 score >= 70이 이미 참이므로 C가 출력됩니다. 뒤에 있는 조건은 아예 검사하지 않습니다.

즉, elif를 쓸 때는 보통 더 까다로운 조건부터 위에 쓰는 습관이 좋습니다.

조건식은 결국 True와 False가 된다

조건문은 겉으로 보면 복잡해 보여도, 속으로는 아주 단순하게 움직입니다.

  • 조건이 참이면 실행한다.

  • 조건이 거짓이면 건너뛴다.

파이썬에는 True와 False라는 불리언 값이 있습니다. 불리언은 참과 거짓만 나타내는 자료형입니다.

is_raining = True

if is_raining:
    print("우산을 챙기세요.")

이처럼 꼭 == True를 쓰지 않아도 됩니다. 값 자체가 이미 참이나 거짓이면 그대로 조건에 넣을 수 있습니다.2

그리고 파이썬은 어떤 값들을 참이나 거짓처럼 다루기도 합니다. 예를 들어 0, 빈 문자열 "", None, 비어 있는 리스트 같은 값은 거짓으로 취급됩니다. 반대로 값이 들어 있는 문자열이나 숫자 대부분은 참으로 취급됩니다.2

nickname = input("별명을 입력하세요: ")

if nickname:
    print("별명이 입력되었습니다.")
else:
    print("아무것도 입력하지 않았네요.")

사용자가 엔터만 눌렀다면 nickname은 빈 문자열이므로 거짓처럼 판단됩니다. 이런 성질은 나중에 꽤 편리하게 쓰입니다.

조건을 더 똑똑하게 만들기: and, or, not

하나의 조건만으로는 부족할 때가 있습니다. 그럴 때 논리 연산자를 사용합니다.4

and는 둘 다 참이어야 참입니다.

age = 20
has_ticket = True

if age >= 18 and has_ticket:
    print("입장할 수 있습니다.")

or는 둘 중 하나만 참이어도 참입니다.

is_weekend = False
is_holiday = True

if is_weekend or is_holiday:
    print("오늘은 쉴 수 있어요.")

not은 참과 거짓을 뒤집습니다.

is_logged_in = False

if not is_logged_in:
    print("먼저 로그인해 주세요.")

처음에는 조금 낯설지만, 말로 읽어 보면 어렵지 않습니다.

"나이가 18 이상이고 표도 있으면 입장 가능."

이렇게 일상 문장을 그대로 코드로 옮긴다고 생각하면 됩니다.

조건문 안에 조건문 넣기: 중첩 조건문

조건문 안에 또 다른 조건문을 넣을 수도 있습니다. 이것을 중첩 조건문이라고 합니다.1

number = int(input("숫자를 입력하세요: "))

if number >= 0:
    if number == 0:
        print("0입니다.")
    else:
        print("양수입니다.")
else:
    print("음수입니다.")

이 코드는 먼저 "0 이상인가?"를 검사하고, 맞다면 그 안에서 다시 "정확히 0인가?"를 검사합니다.

중첩 조건문은 분명 강력합니다. 하지만 너무 깊어지면 코드를 읽기가 힘들어집니다. 처음에는 잘게 나누는 느낌이 재미있지만, 어느 순간 미로가 되기도 합니다. 그래서 가능한 경우에는 elif나 논리 연산자를 활용해 더 간단하게 쓰는 습관이 좋습니다.

한 줄로 짧게 쓰는 조건식

아주 간단한 판단은 한 줄로도 쓸 수 있습니다.4

age = 17
message = "성인입니다." if age >= 18 else "미성년자입니다."
print(message)

읽는 순서는 조금 독특합니다.

"조건이 참이면 앞의 값, 아니면 뒤의 값."

이 방식은 짧고 편리하지만, 너무 복잡하게 쓰면 오히려 읽기 어려워집니다. 초보 단계에서는 간단한 값 대입 정도에만 쓰는 것이 좋습니다.

자주 하는 실수는 미리 알고 가자

조건문은 처음 배울 때 생각보다 자주 틀립니다. 하지만 틀리는 이유가 거의 비슷해서, 미리 알아 두면 훨씬 덜 당황합니다.

  • =와 ==를 헷갈리는 실수

  • if 뒤에 콜론 :을 빼먹는 실수

  • 들여쓰기를 하지 않거나 들쭉날쭉하게 하는 실수

  • elif의 순서를 잘못 써서 위 조건이 아래 조건을 가로막는 실수

  • 숫자를 입력받고도 int()로 바꾸지 않아 문자열 비교나 계산을 이상하게 하는 실수

예를 들어 이런 코드는 흔한 실수입니다.

score = input("점수를 입력하세요: ")

if score >= 90:
    print("A")

겉보기에는 멀쩡해 보이지만, input()으로 받은 값은 문자열입니다. 숫자 비교를 하려면 이렇게 바꿔야 합니다.

score = int(input("점수를 입력하세요: "))

if score >= 90:
    print("A")

입력, 자료형, 조건문은 서로 따로 떨어진 개념이 아닙니다. 지금까지 배운 내용이 여기서 하나로 합쳐집니다.

실전 감각 키우기: 날씨 안내 프로그램

이제 조건문을 이용해 작은 프로그램을 하나 만들어 봅시다.

temperature = int(input("현재 기온을 입력하세요: "))

if temperature >= 30:
    print("많이 덥네요. 물을 자주 마셔요!")
elif temperature >= 20:
    print("활동하기 좋은 날씨예요.")
elif temperature >= 10:
    print("조금 선선하니 겉옷을 챙기세요.")
else:
    print("꽤 춥습니다. 따뜻하게 입으세요.")

이 프로그램이 좋은 이유는 몇 가지가 있습니다.

먼저 숫자를 입력받아 int()로 바꾸고 있습니다. 그리고 if, elif, else를 이용해 기온 구간마다 다른 메시지를 보여 줍니다. 마지막으로 조건의 순서가 왜 중요한지도 자연스럽게 드러납니다. 35도는 >= 30에서 이미 잡히므로 아래 조건은 볼 필요가 없습니다.

프로그램이 드디어 "같은 질문에 늘 같은 대답만 하던 상태"를 벗어난 셈입니다.

조금 더 재미있게: 놀이공원 탑승 판정기

이번에는 조건을 둘 이상 함께 써 보겠습니다.

age = int(input("나이를 입력하세요: "))
height = int(input("키(cm)를 입력하세요: "))

if height < 120:
    print("안전을 위해 탑승할 수 없습니다.")
elif age < 10:
    print("보호자와 함께 탑승해야 합니다.")
else:
    print("혼자 탑승할 수 있습니다.")

여기서는 키를 먼저 검사합니다. 안전 기준이 더 우선이기 때문입니다. 그다음 나이를 보고, 마지막에 나머지를 처리합니다.

이런 식으로 조건문의 순서는 단순한 문법 문제가 아니라, 무엇을 먼저 판단해야 하는가를 정하는 설계 문제이기도 합니다.

if를 여러 번 쓰는 것과 elif를 쓰는 것은 다르다

초보자가 헷갈리는 부분 중 하나가 이것입니다.

다음 코드를 봅시다.

number = 5

if number > 0:
    print("양수입니다.")

if number < 10:
    print("10보다 작습니다.")

이 코드는 두 조건이 각각 따로 검사되므로, 둘 다 참이면 두 문장이 모두 출력됩니다.

반면에 이렇게 쓰면:

number = 5

if number > 0:
    print("양수입니다.")
elif number < 10:
    print("10보다 작습니다.")

첫 번째 조건이 이미 참이므로 두 번째는 검사하지 않습니다.

즉,

  • 여러 조건을 각각 독립적으로 검사하고 싶으면 if를 여러 번 쓴다.

  • 여러 조건 중 하나만 선택하고 싶으면 if-elif-else를 쓴다.

이 차이를 이해하면 조건문이 훨씬 선명하게 보입니다.

연습 문제처럼 직접 바꿔 보면 더 빨리 는다

조건문은 읽는 것보다 직접 살짝 바꿔 보는 연습이 훨씬 중요합니다. 다음과 같은 연습이 특히 좋습니다.

  • 숫자를 입력받아 양수, 음수, 0을 구분하기

  • 점수를 입력받아 등급 출력하기

  • 나이를 입력받아 어린이, 청소년, 성인 구분하기

  • 비밀번호가 맞으면 환영 메시지, 틀리면 실패 메시지 출력하기

  • 로그인 여부를 True, False로 저장하고 다른 문장 출력하기

코드를 만들 때는 무조건 길게 쓰려 하지 말고, 먼저 "무슨 조건이 필요한가?"를 한국어로 적어 보는 것도 좋은 방법입니다. 그러고 나서 그 문장을 파이썬 코드로 옮기면 훨씬 덜 헷갈립니다.

마무리

이번 장에서 우리는 프로그램이 상황에 따라 다른 행동을 하게 만드는 첫 도구를 배웠습니다. 조건문은 단순히 문법 하나를 더 배우는 것이 아닙니다. 프로그램의 흐름을 갈라서, 마치 판단하는 것처럼 보이게 만드는 핵심 장치입니다.

정리하면 이렇습니다.

  • if는 조건이 참일 때만 코드를 실행한다.

  • else는 조건이 거짓일 때 실행할 길을 만들어 준다.

  • elif는 여러 경우 중 하나를 고르게 해 준다.

  • 조건문에서는 들여쓰기가 매우 중요하다.

  • 비교 연산자와 논리 연산자를 함께 쓰면 더 똑똑한 판단을 만들 수 있다.

  • if-elif-else에서는 위에서부터 검사하며, 처음 참이 된 블록만 실행된다.

이제 여러분의 프로그램은 입력을 받기만 하는 단계를 지나, 그 입력을 보고 스스로 방향을 고를 수 있게 되었습니다. 다음 장에서는 여기서 한 걸음 더 나아가, 이런 판단을 여러 번 반복해서 처리하는 방법을 배우게 됩니다. 한 번 판단하는 프로그램도 똑똑하지만, 반복까지 할 수 있게 되면 훨씬 더 부지런해집니다.

참고

1Python if, if...else Statement (With Examples)

2Python If Statement

3Conditional Statements in Python – Real Python

4Python if elif else

책 목록

처음부터 실전까지, 진짜 쉬운 파이썬 교과서

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기