지금까지 배운 불(bool) 자료형과 비교 연산자는 단순히 참/거짓을 판단하는 데 그쳤습니다. 이제는 이를 활용하여 프로그램의 흐름을 제어할 차례입니다. 조건문은 특정 조건에 따라 다른 코드를 실행하게 만드는 핵심 문법입니다. 이번 포스트에서는 파이썬의 if 조건문에 대해 자세히 알아보겠습니다.
조건문(Conditional Statement)은 특정 조건이 참일 때만 코드를 실행하는 제어 구조입니다.
# 일상생활의 조건
# "비가 오면 우산을 챙긴다"
# "나이가 18세 이상이면 입장할 수 있다"
# "점수가 60점 이상이면 합격이다"
# 이를 코드로 표현
if 비가_온다:
우산을_챙긴다()
if 조건식:
실행할_코드
핵심 규칙:
1. if 키워드 다음에 조건식 작성
2. 조건식 끝에 콜론(:) 필수
3. 다음 줄은 들여쓰기 4칸 (Tab 1번)
4. 조건이 True일 때만 실행
age = 20
if age >= 18:
print('성인입니다')
실행 결과:
성인입니다
흐름:
1. age >= 18 평가 → 20 >= 18 → True
2. 조건이 참이므로 print('성인입니다') 실행
age = 15
if age >= 18:
print('성인입니다')
print('프로그램 종료')
실행 결과:
프로그램 종료
흐름:
1. age >= 18 평가 → 15 >= 18 → False
2. 조건이 거짓이므로 print('성인입니다') 실행하지 않음
3. if 블록을 벗어나 print('프로그램 종료') 실행
조건식이 만족할 때 실행할 코드를 if 본문 또는 if 블록이라고 부릅니다.
score = 85
if score >= 60:
# 여기서부터 if 본문 시작
print('합격입니다!')
print(f'당신의 점수: {score}점')
print('축하합니다!')
# 여기까지 if 본문
실행 결과:
합격입니다!
당신의 점수: 85점
축하합니다!
if 다음 줄은 반드시 들여쓰기를 해야 합니다.
# 올바른 예
if True:
print('올바른 들여쓰기')
# 잘못된 예 - 에러!
if True:
print('들여쓰기 없음') # IndentationError
if 본문의 모든 코드는 들여쓰기 깊이가 같아야 합니다.
# 올바른 예
if True:
print('첫 번째 줄') # 4칸
print('두 번째 줄') # 4칸
print('세 번째 줄') # 4칸
# 잘못된 예 - 에러!
if True:
print('첫 번째 줄') # 4칸
print('두 번째 줄') # 6칸 - IndentationError!
들여쓰기가 끝나면 if 블록이 종료됩니다.
score = 85
if score >= 60:
print('합격입니다!') # if 블록 안
print(f'점수: {score}') # if 블록 안
print('프로그램 종료') # if 블록 밖 (항상 실행)
실행 결과:
합격입니다!
점수: 85
프로그램 종료
만약 score = 50이라면:
프로그램 종료
중요: if에 할당 연산자 =를 사용하면 문법 에러가 발생합니다.
x = 10
# 잘못된 예 - 에러!
if x = 10: # SyntaxError: invalid syntax
print('x는 10입니다')
# 올바른 예
if x == 10: # 비교 연산자 ==
print('x는 10입니다')
| 연산자 | 의미 | 사용처 |
|---|---|---|
= | 할당 | 변수에 값 저장 |
== | 비교 | 조건식에서 같은지 확인 |
pass 키워드는 아무것도 하지 않는 명령어입니다. 코드를 나중에 작성할 때 임시로 사용합니다.
age = 25
if age >= 18:
pass # TODO: 나중에 구현
# 일단 비워둠
print('다음 코드 실행')
실행 결과:
다음 코드 실행
# 에러!
if age >= 18:
# 본문이 비어있음
print('다음 코드') # IndentationError
if 블록은 최소 1줄의 코드가 필요하므로, 비워두고 싶다면 pass를 사용해야 합니다.
# 프로그램 설계 단계
def login(username, password):
pass # TODO: 로그인 로직 구현
def register(user_info):
pass # TODO: 회원가입 로직 구현
def send_email(to, subject, body):
pass # TODO: 이메일 전송 구현
# 나중에 하나씩 구현
주석과 함께 사용하여 TODO(할 일)를 남겨둘 수 있습니다.
x = 10
if x > 5:
print('x는 5보다 큽니다')
if x >= 10:
print('x는 10 이상입니다')
if x == 10:
print('x는 10입니다')
if x != 20:
print('x는 20이 아닙니다')
age = 25
has_ticket = True
# and: 둘 다 참
if age >= 18 and has_ticket:
print('입장 가능합니다')
# or: 하나라도 참
is_vip = False
if has_ticket or is_vip:
print('입장 가능합니다')
# not: 반전
is_banned = False
if not is_banned:
print('정상 사용자입니다')
# 리스트에 포함 여부
fruits = ['apple', 'banana', 'cherry']
if 'apple' in fruits:
print('사과가 있습니다')
# 문자열에 포함 여부
text = 'Hello, Python!'
if 'Python' in text:
print('Python이 포함되어 있습니다')
# 딕셔너리 키 확인
user = {'name': 'Alice', 'age': 25}
if 'name' in user:
print(f"이름: {user['name']}")
# 빈 문자열은 False
name = input('이름을 입력하세요: ')
if name: # name이 비어있지 않으면 True
print(f'안녕하세요, {name}님!')
else:
print('이름을 입력해주세요')
# 빈 리스트는 False
items = []
if items:
print('항목이 있습니다')
else:
print('항목이 없습니다') # 실행됨
if 안에 또 다른 if문을 사용할 수 있습니다. 이를 중첩 if문이라고 합니다.
age = 25
has_license = True
if age >= 18:
print('성인입니다')
if has_license:
print('운전 가능합니다')
실행 결과:
성인입니다
운전 가능합니다
중첩 if문에서는 들여쓰기가 매우 중요합니다.
score = 85
attendance = 90
if score >= 60:
print('점수 합격')
if attendance >= 80: # 안쪽 if는 8칸 들여쓰기
print('출석 합격')
print('최종 합격!')
시각화:
if score >= 60: (0칸)
print('점수 합격') (4칸 - 바깥 if 본문)
if attendance >= 80: (4칸 - 바깥 if 본문)
print('출석 합격') (8칸 - 안쪽 if 본문)
print('최종 합격!') (8칸 - 안쪽 if 본문)
age = 20
is_student = True
has_id = True
if age >= 18:
print('성인 확인 완료')
if is_student:
print('학생입니다')
if has_id:
print('학생증 확인 완료')
print('할인 가능합니다')
실행 결과:
성인 확인 완료
학생입니다
학생증 확인 완료
할인 가능합니다
다음 두 코드는 같은 결과를 냅니다.
# 중첩 if
age = 25
has_ticket = True
if age >= 18:
if has_ticket:
print('입장 가능')
# 논리 연산자 (더 간결)
if age >= 18 and has_ticket:
print('입장 가능')
권장: 간단한 조건은 논리 연산자로, 복잡한 로직은 중첩 if로 표현합니다.