07. 조건문
if/elif/else로 상황에 따라 다른 코드를 실행한다.- Python의 들여쓰기 규칙(코드 블록)을 이해한다.
in키워드로 포함 여부를 조건에 활용한다.- 5장의 Truthy/Falsy를 조건문에서 파이썬답게 쓴다.
갈림길에서 길 고르기
지금까지 코드는 위에서 아래로 한 줄씩 차례대로 실행됐습니다. 하지만 진짜 프로그램은 상황에 따라 다르게 행동해야 합니다. "비가 오면 우산을 챙기고, 아니면 그냥 나간다"처럼요.
이 갈림길을 만드는 것이 조건문입니다. 5장에서 배운 불리언(True/False)이 여기서 빛을 발합니다.
age = 20 if age >= 18: print("입장 가능합니다") # 출력: 입장 가능합니다
if 뒤의 조건(age >= 18)이 True이면 아래 들여쓴 코드를 실행하고, False이면 건너뜁니다.
flowchart TD
Start([시작]):::start --> Cond{"age >= 18 ?"}:::proc
Cond -->|True| Do["'입장 가능' 출력"]:::result
Cond -->|False| Skip["아무것도 안 함"]:::data
Do --> End([계속])
Skip --> End
classDef start fill:#fff3b0,stroke:#e0a800,color:#5c4500
classDef proc fill:#7fd8d8,stroke:#2a9d8f,color:#14532d
classDef result fill:#b8e6c1,stroke:#34a853,color:#14532d
classDef data fill:#a8dadc,stroke:#457b9d,color:#1d3557
⭐ 들여쓰기가 곧 문법이다
많은 언어가 코드 묶음을 중괄호 { }로 표시하지만, Python은 들여쓰기(indentation)로 표시합니다. 이게 Python의 가장 큰 특징 중 하나입니다.
if 줄 끝에는 콜론 :을 붙이고, 그 조건이 참일 때 실행할 코드를 한 단계 들여씁니다. 들여쓰기는 보통 공백 4칸입니다.
if age >= 18: print("이 줄은 if에 속함") # 들여쓴 줄 print("이 줄도 if에 속함") # 들여쓴 줄 print("이 줄은 if와 무관") # 들여쓰기 없음 → 항상 실행
```python
if age >= 18:
print("입장") # 들여쓰기 없음!
```
```text
IndentationError: expected an indented block after 'if' statement on line 1
```
IndentationError는 "들여쓰기가 잘못됐다"는 뜻입니다. if, 다음에 올 for·def 등 콜론 :으로 끝나는 줄 다음에는 반드시 들여쓴 블록이 와야 합니다.if – elif – else: 여러 갈래
조건이 여러 개일 때는 elif(else if의 줄임)와 else를 씁니다.
score = 75 if score >= 90: print("A") elif score >= 80: print("B") elif score >= 70: print("C") else: print("F") # 출력: C
위에서부터 조건을 차례로 검사하다가 처음으로 참인 곳을 실행하고 나머지는 건너뜁니다. 어느 것도 참이 아니면 else를 실행합니다.
if/elif는 위에서부터 순서대로 검사하고, 처음 참인 가지 하나만 실행한다. 그래서 조건의 순서가 중요하다.순서가 왜 중요한지 봅시다. score = 95일 때 위 코드는 첫 번째 score >= 90에서 바로 "A"를 출력하고 멈춥니다. 만약 조건을 거꾸로(>= 70부터) 썼다면 95점도 "C"가 되어버립니다.
| 구조 | 의미 |
|---|---|
if 조건: | 가장 먼저 검사. 참이면 실행하고 끝 |
elif 조건: | 앞이 거짓일 때 검사. 여러 개 가능 |
else: | 위 전부 거짓일 때 실행. 조건 없음. 생략 가능 |
조건 안에서 and/or/in
5장의 논리 연산자와 in을 조건에 그대로 쓸 수 있습니다.
age = 20 has_ticket = True if age >= 18 and has_ticket: print("입장 가능") # 출력: 입장 가능
in은 리스트·문자열·딕셔너리 등에 어떤 값이 들어 있는지 검사합니다.
fruits = ["사과", "배", "감"] if "사과" in fruits: print("사과가 있습니다") # 실행됨 command = input("명령: ") if command in ["start", "stop", "restart"]: print("유효한 명령입니다")
중첩 조건문
조건문 안에 또 조건문을 넣을 수 있습니다(들여쓰기가 한 단계 더 깊어집니다).
age = 20 if age >= 18: print("성인입니다") if age >= 65: print("경로우대 대상입니다") else: print("일반 요금입니다") # 출력: # 성인입니다 # 일반 요금입니다
and로 합치거나(if age >= 18 and age < 65:) 구조를 단순하게 만드는 게 좋습니다.⭐ 파이썬다운 조건문
5장에서 배운 Truthy/Falsy 덕분에, 비어 있는지 검사를 짧게 쓸 수 있습니다.
name = input("이름: ") # ❌ 나쁜 예: 장황한 비교 if len(name) > 0: print(f"{name}님 환영합니다") else: print("이름이 비어 있습니다") # ✅ 좋은 예: name 자체가 Truthy/Falsy if name: # 비어 있지 않으면 참 print(f"{name}님 환영합니다") else: print("이름이 비어 있습니다")
리스트가 비었는지도 마찬가지입니다.
items = [] # ❌ if len(items) == 0: # ✅ 파이썬답게: if not items: # 비어 있으면 참 print("장바구니가 비었습니다")
len(x) == 0 대신 if not x:, "뭔가 있나?"는 len(x) > 0 대신 if x:가 파이썬답다.💡 삼항 표현식: 한 줄 조건
값을 둘 중 하나로 정할 때, if/else를 한 줄로 압축할 수 있습니다.
age = 20 # 일반적인 if/else if age >= 18: status = "성인" else: status = "미성년" # 삼항 표현식 (같은 결과, 한 줄) status = "성인" if age >= 18 else "미성년" print(status) # 성인
읽는 순서는 "age >= 18이면 "성인", 아니면 "미성년""입니다. 짧은 양자택일에만 쓰고, 복잡해지면 일반 if/else가 낫습니다.
이 장에서 배운 것
- 조건문
if는 조건이 참일 때만 들여쓴 블록을 실행한다. 줄 끝에 콜론:. - Python은 들여쓰기(공백 4칸)로 코드 블록을 표시한다. 빠뜨리면
IndentationError. if/elif/else는 위에서부터 검사해 처음 참인 가지 하나만 실행한다. 순서가 중요하다.- 조건에
and/or/in을 조합한다. 비었는지 검사는if not x:, 있는지는if x:가 파이썬답다. - 짧은 양자택일은 삼항 표현식
A if 조건 else B로 한 줄에 쓴다.
🧪 실습 문제
문제 1. 숫자 하나를 입력받아 양수면 "양수", 0이면 "영", 음수면 "음수"를 출력하는 코드를 if/elif/else로 작성하세요.
문제 2. 다음 코드의 출력은? 그리고 왜 그런가요?
score = 95 if score >= 70: print("통과") elif score >= 90: print("우수")
문제 3. 리스트 vip = ["민지", "현우"]가 있습니다. 입력받은 이름이 이 리스트에 있으면 "VIP 고객", 없으면 "일반 고객"을 출력하세요. (in 사용)
문제 4. 다음을 파이썬다운 방식으로 고치세요.
cart = [] if len(cart) == 0: print("비어 있음")
문제 5. 나이 age를 받아 삼항 표현식으로 "성인"/"미성년"을 정해 fee라는 변수에 담되, 성인은 12000, 미성년은 6000이 되도록 작성하세요.
<details>
<summary>✅ 정답·해설 보기</summary>
1.
n = int(input("숫자: ")) if n > 0: print("양수") elif n == 0: print("영") else: print("음수")
2. 통과. score가 95라서 첫 조건 score >= 70이 참이 되는 순간 "통과"를 출력하고 멈춥니다. elif score >= 90은 검사조차 되지 않습니다. 더 구체적인(엄격한) 조건을 위에 둬야 한다는 교훈입니다. >= 90을 먼저 검사하도록 순서를 바꿔야 "우수"가 나옵니다.
3.
vip = ["민지", "현우"] name = input("이름: ") if name in vip: print("VIP 고객") else: print("일반 고객")
4.
cart = [] if not cart: print("비어 있음")
5.
age = int(input("나이: ")) fee = 12000 if age >= 18 else 6000 print(fee)
</details>
◀️ 이전 장: 06. 자료구조 | ▶️ 다음 장: 08. 반복문