
파이썬을 다시 공부하면서 조건문을 보면 갈림길 표지판이 떠올랐습니다. 지금까지의 코드는 위에서 아래로 곧게 걸어갔지만, 실제 프로그램은 모든 상황에서 같은 행동을 하면 곤란합니다. 비가 오면 우산을 챙기고, 표가 있으면 입장하고, 사람이 0명이면 나눗셈을 멈춰야 합니다.
지난 글에서는 input()으로 값을 받고 int(), float(), str()로 형 변환하는 방법을 배웠습니다. 이번에는 입력한 나이·점수·인원수에 따라 실행할 코드를 고르는 if, elif, else 조건문을 알아보겠습니다.
조건문은 프로그램에 선택권을 준다
조건문이 없는 코드는 작성된 문장을 차례대로 모두 실행합니다.
age = 12
print("표를 확인합니다.")
print("영화관에 입장합니다.")
나이가 12세여도 마지막 문장은 그대로 실행됩니다. 입장 가능한 나이인지 확인하려면 프로그램에 질문을 하나 넣어야 합니다.
age = 12
if age >= 15:
print("영화관에 입장합니다.")
age >= 15의 결과는 False이므로 들여쓴 출력문을 건너뜁니다. 조건문은 코드를 위에서 아래로 읽는 흐름 중간에 갈림길을 만들고, 조건이 참일 때만 특정 코드 묶음으로 들어가게 합니다.
첫 if문을 부분별로 읽어 보기
temperature = 30
if temperature >= 28:
print("물을 챙기세요.")
if문은 네 부분으로 나누어 읽을 수 있습니다.
if: 이제 조건을 확인하겠다는 키워드입니다.temperature >= 28: 참인지 거짓인지 판단할 조건식입니다.:: 조건 아래에 실행할 코드 묶음이 시작됨을 알립니다.- 들여쓴 문장: 조건이 참일 때만 실행할 코드 블록입니다.
파이썬은 먼저 temperature >= 28을 계산합니다. 결과가 True이면 들여쓴 줄을 실행하고, False이면 그 블록을 건너뜁니다.
물을 챙기세요.
조건에는 지난 글에서 배운 비교 연산자가 자주 사용됩니다.
score = 85
print(score >= 80)
True
if가 특별한 방식으로 점수를 이해하는 것은 아닙니다. 비교 연산이 만든 True 또는 False를 보고 다음 길을 고르는 것입니다.
들여쓰기는 실행 범위를 정한다
다음 코드에서 두 문장의 위치를 살펴보겠습니다.
is_raining = True
if is_raining:
print("우산을 챙깁니다.")
print("미끄러운 길을 조심합니다.")
print("집을 나섭니다.")
앞의 두 출력문은 같은 만큼 들여썼으므로 if에 포함됩니다. 마지막 출력문은 다시 왼쪽으로 돌아왔으므로 조건문 밖에 있습니다. 비가 오지 않으면 우산과 미끄러운 길 안내는 건너뛰지만, 집을 나선다는 문장은 항상 실행됩니다.
조건문에서 들여쓰기는 보기 좋게 정렬하는 장식이 아니라 어떤 문장이 어느 갈림길에 속하는지를 정하는 문법입니다. 보통 한 단계에 공백 네 칸을 사용합니다.
else는 조건이 거짓일 때의 길이다
입장 가능하거나 가능하지 않은 두 상황을 모두 처리하려면 else를 사용합니다.
age = 12
if age >= 15:
print("영화관에 입장할 수 있습니다.")
else:
print("보호자와 함께 입장해 주세요.")
보호자와 함께 입장해 주세요.
else에는 조건식을 쓰지 않습니다. 앞의 if 조건이 거짓인 나머지 모든 경우를 맡기 때문입니다.
age >= 15가 True → if 블록 실행
age >= 15가 False → else 블록 실행
두 블록이 동시에 실행되는 일은 없습니다. 하나가 선택되면 다른 하나는 건너뜁니다.
elif는 여러 갈림길을 차례로 확인한다
상황이 두 가지보다 많다면 elif를 사용합니다. elif는 else if를 줄인 말로, 앞 조건이 거짓일 때 다음 조건을 묻습니다.
score = 82
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "D"
print("등급:", grade)
등급: B
파이썬은 위에서부터 조건을 확인합니다.
score >= 90은 거짓이므로 다음으로 이동합니다.score >= 80은 참이므로grade = "B"를 실행합니다.- 이미 길을 골랐으므로 아래의
elif와else는 확인하지 않습니다.
하나의 if·elif·else 사슬에서는 처음 참이 된 블록 하나만 실행됩니다.
조건의 순서가 결과를 바꾼다
넓은 조건을 먼저 쓰면 뒤의 좁은 조건까지 도달하지 못할 수 있습니다.
score = 95
if score >= 70:
print("C 이상")
elif score >= 90:
print("A")
95는 첫 조건인 score >= 70부터 참이므로 C 이상만 출력됩니다. 높은 점수부터 내려오듯 더 구체적이거나 좁은 조건을 먼저 배치해야 원하는 등급을 구할 수 있습니다.
여러 if문과 elif는 무엇이 다를까?
독립된 if문은 각각 따로 질문합니다.
score = 95
if score >= 80:
print("합격입니다.")
if score >= 90:
print("우수 성적입니다.")
합격입니다.
우수 성적입니다.
두 조건이 모두 참이므로 두 문장이 모두 실행됩니다. 반면 elif는 앞에서 하나를 골랐다면 나머지 길을 건너뜁니다.
- 여러 결과가 동시에 가능하면 독립된
if를 사용합니다. - 여러 선택지 중 하나만 골라야 하면
if·elif·else를 연결합니다.
할인 쿠폰과 적립금을 동시에 받을 수 있다면 각각의 if가 어울립니다. 점수를 A, B, C 중 하나로 분류한다면 elif 사슬이 어울립니다.
and와 or로 조건을 묶는다
두 질문을 함께 확인할 때는 앞에서 배운 논리 연산자를 사용합니다.
age = 17
has_ticket = True
if age >= 15 and has_ticket:
print("입장할 수 있습니다.")
else:
print("나이와 표를 확인해 주세요.")
and는 나이 조건과 표 조건이 모두 참이어야 전체를 참으로 만듭니다.
is_member = False
has_coupon = True
if is_member or has_coupon:
print("할인을 받을 수 있습니다.")
or는 둘 중 하나만 참이어도 할인 길을 선택합니다. 조건이 길어지면 괄호로 질문의 덩어리를 보여 주면 읽기 쉽습니다.
if (age >= 15) and has_ticket:
print("입장할 수 있습니다.")
조건식에는 bool이 아닌 값도 올 수 있다
파이썬은 문자열이나 숫자도 참과 거짓처럼 판단할 수 있습니다. 빈 문자열과 숫자 0은 거짓으로, 내용이 있는 문자열과 0이 아닌 숫자는 참으로 판단됩니다.
name = "민지"
if name:
print("이름이 입력되었습니다.")
이름이 입력되었습니다.
name이 ""라면 출력문은 실행되지 않습니다. 이런 판단을 참 같은 값과 거짓 같은 값이라고 이해할 수 있습니다.
처음에는 if name != "":처럼 비교를 분명히 적어도 좋습니다. 코드가 익숙해지면 if name:이 “문자열이 비어 있지 않은가?”를 묻는 자연스러운 표현이라는 점이 보입니다.
중첩 조건은 선택한 길 안에서 다시 질문한다
한 조건을 통과한 뒤에만 추가로 확인할 일이 있다면 if 안에 또 다른 if를 넣을 수 있습니다.
has_ticket = True
age = 17
if has_ticket:
print("표를 확인했습니다.")
if age >= 15:
print("입장할 수 있습니다.")
else:
print("보호자와 함께 와 주세요.")
else:
print("표를 먼저 준비해 주세요.")
바깥쪽 if는 표가 있는지 확인하고, 그 길 안에 들어왔을 때만 안쪽 if가 나이를 확인합니다. 들여쓰기 단계가 하나 더 늘어날수록 더 안쪽의 질문이라는 뜻입니다.
중첩은 순서를 표현하는 데 유용하지만 너무 깊어지면 길을 잃기 쉽습니다. and로 자연스럽게 묶을 수 있는 단순 조건은 한 줄로 표현하고, 앞 조건을 통과한 뒤 별도 행동이 필요한 경우에 중첩을 사용하는 편이 좋습니다.
간식 나누기 프로그램을 안전하게 만들기
지난 글에서는 사용자에게 간식 수와 사람 수를 입력받았습니다. 그런데 사람 수에 0을 입력하면 0으로 나눌 수 없어 오류가 발생합니다. 조건문으로 계산 전에 막아 보겠습니다.
snack_count = int(input("간식은 몇 개인가요? "))
people = int(input("몇 명이 나눠 먹나요? "))
if people > 0:
snacks_per_person = snack_count // people
leftover_snacks = snack_count % people
print("한 사람당:", snacks_per_person, "개")
print("남는 간식:", leftover_snacks, "개")
if leftover_snacks == 0:
print("남김없이 딱 맞게 나눴습니다!")
else:
print("남은 간식은 함께 정해 보세요.")
else:
print("사람 수는 1명 이상이어야 합니다.")
17, 5를 입력하면 다음처럼 실행됩니다.
간식은 몇 개인가요? 17
몇 명이 나눠 먹나요? 5
한 사람당: 3 개
남는 간식: 2 개
남은 간식은 함께 정해 보세요.
사람 수가 0보다 클 때만 //와 %를 계산합니다. 값이 0이면 계산 블록 자체에 들어가지 않고 안내 문구를 출력하므로 ZeroDivisionError를 피할 수 있습니다.
이 프로그램의 흐름은 입력 → 조건 확인 → 필요한 계산 → 결과 출력입니다. 조건문은 결과를 꾸미는 기능을 넘어 실행하면 안 되는 코드를 막는 안전문 역할도 합니다.
자주 하는 실수
콜론을 빠뜨리는 경우
if score >= 80
print("합격")
if, elif, else 머리글 끝에는 :이 필요합니다. 빠뜨리면 SyntaxError가 발생합니다.
들여쓰기를 하지 않는 경우
if score >= 80:
print("합격")
조건에 속한 문장은 한 단계 들여써야 합니다. 같은 블록의 문장들은 들여쓰기 깊이를 맞춥니다.
비교할 때 =를 사용하는 경우
=는 값을 대입하고 ==는 두 값이 같은지 비교합니다. 조건에서 “같은가?”를 묻고 싶다면 score == 100처럼 등호를 두 개 씁니다.
경계값을 빼먹는 경우
“15세 이상”은 age > 15가 아니라 age >= 15입니다. 조건을 작성할 때 기준값 자체가 포함되는지 확인하고 14, 15, 16처럼 경계 주변의 값을 직접 넣어 보는 것이 좋습니다.
모든 조건을 if로만 작성하는 경우
한 가지 등급만 골라야 하는데 독립된 if를 여러 개 쓰면 둘 이상의 블록이 실행될 수 있습니다. 선택지가 서로 배타적인지, 동시에 성립할 수 있는지 먼저 생각해 보세요.
직접 바꿔 보며 확인하기
다음 문제는 조건의 경계값까지 바꿔 보며 실행해 보세요.
- 정수를 입력받아 양수, 0, 음수 중 하나를 출력합니다.
- 나이를 입력받아 8세 미만, 8세 이상 14세 미만, 14세 이상으로 분류합니다.
- 점수와 출석률을 입력받아 두 값이 모두 기준 이상일 때만 합격을 출력합니다.
- 숫자를 입력받아
% 2의 결과로 짝수와 홀수를 구분합니다. - 간식 나누기 프로그램에
snack_count >= people조건을 추가해 모두가 한 개 이상 받을 수 있는지 안내합니다.
조건문은 눈으로만 읽을 때보다 기준값의 바로 아래, 기준값, 바로 위 값을 넣어 볼 때 훨씬 잘 이해됩니다. 79, 80, 81처럼 경계 주변에서 어느 길이 선택되는지 확인해 보세요.
정리
if는 조건이 참일 때 코드 블록을 실행하고, else는 앞 조건이 거짓일 때의 길을 맡습니다. elif는 여러 조건을 위에서부터 확인하며 처음 참이 된 블록 하나만 실행합니다. 독립된 if는 각각 따로 판단하므로 여러 블록이 함께 실행될 수 있습니다.
콜론은 코드 블록의 시작을 알리고, 들여쓰기는 어떤 문장이 그 조건에 속하는지 정합니다. and, or, not으로 질문을 묶을 수 있고, 중첩 조건으로 선택한 길 안에서 다시 질문할 수도 있습니다.
다음 글에서는 같은 일을 여러 번 실행하는 for 반복문과 range()를 다루겠습니다. 조건문으로 한 번 고른 행동을 반복문으로 여러 번 실행하고, 숫자를 차례로 더하는 누적 계산까지 이어가겠습니다.
참고 자료
'파이썬(Python)' 카테고리의 다른 글
| [Python(파이썬)] while문이란? 종료 조건과 break·continue 쉽게 이해하기 (0) | 2026.08.11 |
|---|---|
| [Python(파이썬)] for문이란? range()와 누적 계산 쉽게 이해하기 (0) | 2026.08.10 |
| [Python(파이썬)] input()이란? 사용자 입력과 int·float 형 변환 쉽게 이해하기 (0) | 2026.08.08 |
| [Python(파이썬)] 연산자란? 산술·비교·논리 연산과 우선순위 이해하기 (0) | 2026.08.07 |
| [Python(파이썬)] 기본 자료형이란? int, float, str, bool, None 쉽게 이해하기 (3) | 2026.08.05 |