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