Type something to search...

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칸을 넣어준다.

잘못된 예시 (오류 발생)

1
if True:
2
print("안녕") # ← 들여쓰기가 없어서 오류!

올바른 예시

1
if True:
2
print("안녕") # ← 4칸 들여쓰기

3.2. if(이프) — 기본 조건문

3.2.1. if 의 구조

1
if 조건:
2
조건이 True일 때 실행할 코드

조건이 True 이면 들여쓰기된 코드가 실행된다. 조건이 False 이면 아무것도 실행되지 않는다.

3.2.2. if 기본 예시

1
score = 85
2
3
if score >= 60:
4
print("합격입니다!")
5
print("축하합니다.")
6
7
print("프로그램 종료")
설명
1점수를 85 로 설정한다.
3if score >= 60: 은 “점수가 60 이상이면”이라는 의미이다. 콜론(:)은 반드시 붙여야 한다.
4score >= 60True 이므로 이 줄이 실행된다.
5같은 블록의 코드이므로 이 줄도 실행된다.
7들여쓰기가 없으므로 if 블록 밖이다. 조건과 관계없이 항상 실행된다.

실행 결과

1
합격입니다!
2
축하합니다.
3
프로그램 종료

3.2.3. 조건이 False일 때

1
score = 40
2
3
if score >= 60:
4
print("합격입니다!")
5
6
print("프로그램 종료")
설명
1점수를 40 으로 설정한다.
340 >= 60False 이므로 if 블록 안의 코드가 실행되지 않는다.
4실행되지 않는다.
6if 블록 밖이므로 조건과 관계없이 실행된다.

실행 결과

1
프로그램 종료

3.3. if(이프) / else(엘스)

3.3.1. else 의 구조

elseif 의 조건이 False 일 때 실행될 코드 블록이다.

1
if 조건:
2
조건이 True일 때 실행
3
else:
4
조건이 False일 때 실행

if 또는 else 둘 중 반드시 하나만 실행된다.

3.3.2. if / else 예시

1
score = 45
2
3
if score >= 60:
4
print("합격!")
5
else:
6
print("불합격...")
7
print("다음 기회에 도전하세요.")
8
9
print("채점 완료")
설명
1점수를 45 로 설정한다.
3~445 >= 60False 이므로 이 블록은 실행되지 않는다.
5~7조건이 False 이므로 else 블록이 실행된다.
9if / else 블록 밖이므로 항상 실행된다.

실행 결과

1
불합격...
2
다음 기회에 도전하세요.
3
채점 완료

3.3.3. 예제: 홀수/짝수 판별기

어떤 수를 2로 나눈 나머지가 0이면 짝수, 1이면 홀수이다.

1
n = int(input("숫자를 입력하세요: "))
2
3
if n % 2 == 0:
4
print(f"{n}은 짝수입니다.")
5
else:
6
print(f"{n}은 홀수입니다.")
설명
1사용자에게 숫자를 입력받아 정수로 변환한다.
3n % 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라면”의 의미이다.

1
if 조건1:
2
조건1이 True일 때 실행
3
elif 조건2:
4
조건2가 True일 때 실행
5
elif 조건3:
6
조건3이 True일 때 실행
7
else:
8
모든 조건이 False일 때 실행

조건들은 위에서 아래 순서로 검사한다. 하나가 True 가 되면 그 블록만 실행하고 나머지는 건너뛴다.

3.4.2. 학점 계산기 예시

1
score = 72
2
3
if score >= 90:
4
grade = "A"
5
elif score >= 80:
6
grade = "B"
7
elif score >= 70:
8
grade = "C"
9
elif score >= 60:
10
grade = "D"
11
else:
12
grade = "F"
13
14
print(f"점수: {score}점 → 학점: {grade}")
설명
1점수를 72 로 설정한다.
3~472 >= 90False 이므로 건너뛴다.
5~672 >= 80False 이므로 건너뛴다.
7~872 >= 70True 이므로 grade = "C" 가 실행된다.
9~12이미 조건이 충족되었으므로 나머지는 검사하지 않고 건너뛴다.
14최종 학점을 f-string으로 출력한다.

실행 결과

1
점수: 72점 → 학점: C

3.4.3. elif 주의사항 — 조건 순서가 중요하다

조건을 잘못된 순서로 쓰면 예상과 다른 결과가 나올 수 있다.

잘못된 예시 (버그 발생)

1
score = 95
2
3
if score >= 60:
4
grade = "D" # ← score가 90이어도 여기서 걸려버린다!
5
elif score >= 70:
6
grade = "C"
7
elif score >= 80:
8
grade = "B"
9
elif score >= 90:
10
grade = "A" # ← 이 조건까지 내려오지 못한다
11
12
print(grade) # D 출력 (잘못된 결과)
설명
3~495 >= 60True 이므로 바로 grade = "D" 가 실행된다. 95점인데 D학점이 되는 버그이다.

올바른 예시 (높은 조건부터 검사)

1
score = 95
2
3
if score >= 90: # ← 가장 높은 기준부터 검사한다
4
grade = "A"
5
elif score >= 80:
6
grade = "B"
7
elif score >= 70:
8
grade = "C"
9
elif score >= 60:
10
grade = "D"
11
else:
12
grade = "F"
13
14
print(grade) # A 출력 (올바른 결과)

요약

여러 조건을 쓸 때는 항상 범위가 좁은(엄격한) 조건을 먼저 배치한다. 점수 판별의 경우 높은 점수 조건부터 작성한다.


3.5. 중첩(Nested) 조건문

3.5.1. 중첩 조건문이란?

if 블록 안에 또 다른 if 를 넣을 수 있다. 이를 중첩(Nested) 조건문이라 한다.

1
lv = 30
2
hp = 20
3
4
if lv >= 10:
5
print("보스 도전 레벨 조건 충족")
6
if hp >= 50:
7
print("HP도 충분합니다. 도전!")
8
else:
9
print("HP가 부족합니다. 포션을 사용하세요.")
10
else:
11
print("레벨이 부족합니다. 더 레벨업 하세요.")
설명
1~2레벨과 체력 변수를 설정한다.
4~5레벨이 10 이상이면 첫 번째 블록에 진입한다. lv = 30 이므로 조건 충족이다.
6~7체력이 50 이상이면 도전 가능 메시지를 출력한다. hp = 20 이므로 False 이다.
8~9체력이 부족하므로 else 블록이 실행된다.
10~11레벨이 10 미만이면 실행된다. lv = 30 이므로 여기는 실행되지 않는다.

실행 결과

1
보스 도전 레벨 조건 충족
2
HP가 부족합니다. 포션을 사용하세요.

3.6. 종합 예제: 게임 아이템 등급 판별기

1
print("======= 아이템 감정사 =======")
2
power = int(input("아이템 공격력을 입력하세요: "))
3
4
if power >= 100:
5
rank = "전설"
6
color = "주황색"
7
elif power >= 70:
8
rank = "희귀"
9
color = "보라색"
10
elif power >= 40:
11
rank = "일반"
12
color = "파란색"
13
elif power >= 10:
14
rank = "저급"
15
color = "흰색"
16
else:
17
rank = "고철"
18
color = "회색"
19
20
print(f"\n공격력 {power}의 아이템")
21
print(f"등급: [{rank}]")
22
print(f"색상: {color}")
설명
1~2제목을 출력하고 공격력을 입력받는다.
4~5공격력이 100 이상이면 “전설” 등급, 색상은 “주황색”으로 설정한다.
6~770 이상이면 “희귀” 등급이다.
8~940 이상이면 “일반” 등급이다.
10~1110 이상이면 “저급” 등급이다.
12~13그 외의 경우 “고철” 등급이다.
15~17f-string으로 결과를 출력한다. \n 은 줄바꿈 문자이다.

3.7. 조건 표현식 (삼항 연산자)

간단한 if / else 는 한 줄로 줄여 쓸 수 있다.

1
변수 = 참일때값 if 조건 else 거짓일때값
1
score = 75
2
3
result = "합격" if score >= 60 else "불합격"
4
print(result)
설명
3score >= 60True 이면 "합격", False 이면 "불합격"result 에 저장한다.
4"합격" 을 출력한다.

3.8. 실습 과제

과제 1. 음료수 자동 판매기

input() 으로 투입 금액을 입력받아 아래 조건에 따라 출력한다.

  • 1500원 이상: “콜라 나왔습니다!”
  • 1000원 이상: “주스 나왔습니다!”
  • 500원 이상: “물 나왔습니다!”
  • 500원 미만: “금액이 부족합니다.”
1
money = int(input("금액을 입력하세요: "))
2
3
if money >= 1500:
4
print("콜라 나왔습니다!")
5
elif money >= 1000:
6
print("주스 나왔습니다!")
7
elif money >= 500:
8
print("물 나왔습니다!")
9
else:
10
print("금액이 부족합니다.")

과제 2. BMI(비엠아이) 계산기

체중(kg)과 키(m)를 입력받아 BMI를 계산하고 아래 기준으로 출력한다.

  • 공식: BMI = 체중 / (키 ** 2)
  • 18.5 미만: 저체중
  • 18.5 이상 25 미만: 정상
  • 25 이상 30 미만: 과체중
  • 30 이상: 비만
1
w = float(input("체중(kg): "))
2
h = float(input("키(m): "))
3
4
bmi = w / (h ** 2)
5
print(f"BMI: {bmi:.1f}")
6
7
if bmi < 18.5:
8
status = "저체중"
9
elif bmi < 25:
10
status = "정상"
11
elif bmi < 30:
12
status = "과체중"
13
else:
14
status = "비만"
15
16
print(f"판정: {status}")