3회차: 조건문
코드 블록의 Try it Yourself 버튼으로 직접 실행할 수 있다.
구문
3회차: 조건문
선수 학습: 2회차 (연산자 & 문자열)
학습 목표
- 조건문의 개념을 이해한다.
if/elif/else구문을 사용할 수 있다.input()과 조건문을 결합하여 대화형 프로그램을 만들 수 있다.
3.1. 조건문이란?
3.1.1. 일상 속의 조건문
조건문(Conditional Statement)은 "만약 ~이라면, ~을 한다"는 논리 구조이다. 우리는 일상에서 항상 이런 판단을 한다.
- 만약 비가 오면 우산을 가져간다.
- 만약 배가 고프면 밥을 먹는다. 아니라면 그냥 있는다.
- 만약 점수가 90점 이상이면 A, 80점 이상이면 B, 그렇지 않으면 C이다.
파이썬도 이 구조를 코드로 표현할 수 있다.
3.1.2. 들여쓰기의 중요성
파이썬에서는 들여쓰기(Indentation)로 코드 블록(Block)을 구분한다. 들여쓰기란 코드 앞에 공백을 넣어 계층을 표시하는 것이다.
Warning: 들여쓰기는 스페이스(Space) 4칸을 사용한다. 들여쓰기가 틀리면
IndentationError오류가 발생한다. Tab 키를 사용하면 VS Code에서 자동으로 4칸을 넣어준다.
잘못된 예시 (오류 발생)
if True:
print("안녕") # ← 들여쓰기가 없어서 오류!
올바른 예시
if True:
print("안녕") # ← 4칸 들여쓰기
3.2. if(이프) — 기본 조건문
3.2.1. if 의 구조
if 조건:
조건이 True일 때 실행할 코드
조건이 True 이면 들여쓰기된 코드가 실행된다. 조건이 False 이면 아무것도 실행되지 않는다.
3.2.2. if 기본 예시
score = 85
if score >= 60:
print("합격입니다!")
print("축하합니다.")
print("프로그램 종료")
| 줄 | 설명 |
|---|---|
| 1 | 점수를 85 로 설정한다. |
| 3 | if score >= 60: 은 "점수가 60 이상이면"이라는 의미이다. 콜론(:)은 반드시 붙여야 한다. |
| 4 | score >= 60 이 True 이므로 이 줄이 실행된다. |
| 5 | 같은 블록의 코드이므로 이 줄도 실행된다. |
| 7 | 들여쓰기가 없으므로 if 블록 밖이다. 조건과 관계없이 항상 실행된다. |
실행 결과
합격입니다!
축하합니다.
프로그램 종료
3.2.3. 조건이 False일 때
score = 40
if score >= 60:
print("합격입니다!")
print("프로그램 종료")
| 줄 | 설명 |
|---|---|
| 1 | 점수를 40 으로 설정한다. |
| 3 | 40 >= 60 은 False 이므로 if 블록 안의 코드가 실행되지 않는다. |
| 4 | 실행되지 않는다. |
| 6 | if 블록 밖이므로 조건과 관계없이 실행된다. |
실행 결과
프로그램 종료
3.3. if(이프) / else(엘스)
3.3.1. else 의 구조
else 는 if 의 조건이 False 일 때 실행될 코드 블록이다.
if 조건:
조건이 True일 때 실행
else:
조건이 False일 때 실행
if 또는 else 둘 중 반드시 하나만 실행된다.
3.3.2. if / else 예시
score = 45
if score >= 60:
print("합격!")
else:
print("불합격...")
print("다음 기회에 도전하세요.")
print("채점 완료")
| 줄 | 설명 |
|---|---|
| 1 | 점수를 45 로 설정한다. |
| 3~4 | 45 >= 60 은 False 이므로 이 블록은 실행되지 않는다. |
| 5~7 | 조건이 False 이므로 else 블록이 실행된다. |
| 9 | if / else 블록 밖이므로 항상 실행된다. |
실행 결과
불합격...
다음 기회에 도전하세요.
채점 완료
3.3.3. 예제: 홀수/짝수 판별기
어떤 수를 2로 나눈 나머지가 0이면 짝수, 1이면 홀수이다.
n = int(input("숫자를 입력하세요: "))
if n % 2 == 0:
print(f"{n}은 짝수입니다.")
else:
print(f"{n}은 홀수입니다.")
| 줄 | 설명 |
|---|---|
| 1 | 사용자에게 숫자를 입력받아 정수로 변환한다. |
| 3 | n % 2 == 0 은 "n을 2로 나눈 나머지가 0이면"이라는 조건이다. |
| 4 | 나머지가 0이면 짝수이다. f-string으로 결과를 출력한다. |
| 5~6 | 나머지가 0이 아니면 홀수이다. |
3.4. if / elif(엘스이프) / else
3.4.1. elif 의 구조
조건이 3가지 이상일 때 elif 를 사용한다. elif 는 "else if"의 줄임말로, "앞의 조건이 False이고 이 조건이 True라면"의 의미이다.
if 조건1:
조건1이 True일 때 실행
elif 조건2:
조건2가 True일 때 실행
elif 조건3:
조건3이 True일 때 실행
else:
모든 조건이 False일 때 실행
조건들은 위에서 아래 순서로 검사한다. 하나가 True 가 되면 그 블록만 실행하고 나머지는 건너뛴다.
3.4.2. 학점 계산기 예시
score = 72
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"점수: {score}점 → 학점: {grade}")
| 줄 | 설명 |
|---|---|
| 1 | 점수를 72 로 설정한다. |
| 3~4 | 72 >= 90 은 False 이므로 건너뛴다. |
| 5~6 | 72 >= 80 은 False 이므로 건너뛴다. |
| 7~8 | 72 >= 70 은 True 이므로 grade = "C" 가 실행된다. |
| 9~12 | 이미 조건이 충족되었으므로 나머지는 검사하지 않고 건너뛴다. |
| 14 | 최종 학점을 f-string으로 출력한다. |
실행 결과
점수: 72점 → 학점: C
3.4.3. elif 주의사항 — 조건 순서가 중요하다
조건을 잘못된 순서로 쓰면 예상과 다른 결과가 나올 수 있다.
잘못된 예시 (버그 발생)
score = 95
if score >= 60:
grade = "D" # ← score가 90이어도 여기서 걸려버린다!
elif score >= 70:
grade = "C"
elif score >= 80:
grade = "B"
elif score >= 90:
grade = "A" # ← 이 조건까지 내려오지 못한다
print(grade) # D 출력 (잘못된 결과)
| 줄 | 설명 |
|---|---|
| 3~4 | 95 >= 60 이 True 이므로 바로 grade = "D" 가 실행된다. 95점인데 D학점이 되는 버그이다. |
올바른 예시 (높은 조건부터 검사)
score = 95
if score >= 90: # ← 가장 높은 기준부터 검사한다
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(grade) # A 출력 (올바른 결과)
Tip: 여러 조건을 쓸 때는 항상 범위가 좁은(엄격한) 조건을 먼저 배치한다. 점수 판별의 경우 높은 점수 조건부터 작성한다.
3.5. 중첩(Nested) 조건문
3.5.1. 중첩 조건문이란?
if 블록 안에 또 다른 if 를 넣을 수 있다. 이를 중첩(Nested) 조건문이라 한다.
lv = 30
hp = 20
if lv >= 10:
print("보스 도전 레벨 조건 충족")
if hp >= 50:
print("HP도 충분합니다. 도전!")
else:
print("HP가 부족합니다. 포션을 사용하세요.")
else:
print("레벨이 부족합니다. 더 레벨업 하세요.")
| 줄 | 설명 |
|---|---|
| 1~2 | 레벨과 체력 변수를 설정한다. |
| 4~5 | 레벨이 10 이상이면 첫 번째 블록에 진입한다. lv = 30 이므로 조건 충족이다. |
| 6~7 | 체력이 50 이상이면 도전 가능 메시지를 출력한다. hp = 20 이므로 False 이다. |
| 8~9 | 체력이 부족하므로 else 블록이 실행된다. |
| 10~11 | 레벨이 10 미만이면 실행된다. lv = 30 이므로 여기는 실행되지 않는다. |
실행 결과
보스 도전 레벨 조건 충족
HP가 부족합니다. 포션을 사용하세요.
3.6. 종합 예제: 게임 아이템 등급 판별기
print("======= 아이템 감정사 =======")
power = int(input("아이템 공격력을 입력하세요: "))
if power >= 100:
rank = "전설"
color = "주황색"
elif power >= 70:
rank = "희귀"
color = "보라색"
elif power >= 40:
rank = "일반"
color = "파란색"
elif power >= 10:
rank = "저급"
color = "흰색"
else:
rank = "고철"
color = "회색"
print(f"\n공격력 {power}의 아이템")
print(f"등급: [{rank}]")
print(f"색상: {color}")
| 줄 | 설명 |
|---|---|
| 1~2 | 제목을 출력하고 공격력을 입력받는다. |
| 4~5 | 공격력이 100 이상이면 "전설" 등급, 색상은 "주황색"으로 설정한다. |
| 6~7 | 70 이상이면 "희귀" 등급이다. |
| 8~9 | 40 이상이면 "일반" 등급이다. |
| 10~11 | 10 이상이면 "저급" 등급이다. |
| 12~13 | 그 외의 경우 "고철" 등급이다. |
| 15~17 | f-string으로 결과를 출력한다. \n 은 줄바꿈 문자이다. |
3.7. 조건 표현식 (삼항 연산자)
간단한 if / else 는 한 줄로 줄여 쓸 수 있다.
변수 = 참일때값 if 조건 else 거짓일때값
score = 75
result = "합격" if score >= 60 else "불합격"
print(result)
| 줄 | 설명 |
|---|---|
| 3 | score >= 60 이 True 이면 "합격", False 이면 "불합격" 을 result 에 저장한다. |
| 4 | "합격" 을 출력한다. |
3.8. 실습 과제
과제 1. 음료수 자동 판매기
input() 으로 투입 금액을 입력받아 아래 조건에 따라 출력한다.
- 1500원 이상: "콜라 나왔습니다!"
- 1000원 이상: "주스 나왔습니다!"
- 500원 이상: "물 나왔습니다!"
- 500원 미만: "금액이 부족합니다."
정답 예시 보기
money = int(input("금액을 입력하세요: "))
if money >= 1500:
print("콜라 나왔습니다!")
elif money >= 1000:
print("주스 나왔습니다!")
elif money >= 500:
print("물 나왔습니다!")
else:
print("금액이 부족합니다.")
과제 2. BMI(비엠아이) 계산기
체중(kg)과 키(m)를 입력받아 BMI를 계산하고 아래 기준으로 출력한다.
- 공식:
BMI = 체중 / (키 ** 2) - 18.5 미만: 저체중
- 18.5 이상 25 미만: 정상
- 25 이상 30 미만: 과체중
- 30 이상: 비만
정답 예시 보기
w = float(input("체중(kg): "))
h = float(input("키(m): "))
bmi = w / (h ** 2)
print(f"BMI: {bmi:.1f}")
if bmi < 18.5:
status = "저체중"
elif bmi < 25:
status = "정상"
elif bmi < 30:
status = "과체중"
else:
status = "비만"
print(f"판정: {status}")