Skip to content

3주차 · 조건문

  • Boolean과 비교 연산자의 차이를 예제로 설명할 수 있다.
  • if/elif/else 기본 문법과 들여쓰기 규칙을 설명할 수 있다.
  • if/elif/else 분기 순서를 조건 우선순위와 함께 설계할 수 있다.
  • C의 조건문과 Python 조건문의 차이를 예제로 설명할 수 있다.
  • 경계값(예: 69/70/71) 테스트 케이스를 스스로 만들 수 있다.
  • 중첩 조건문을 읽고 논리 오류를 추적할 수 있다.
  • 분기 결과를 코드 출력 + 해석 문장으로 정리할 수 있다.

조건문은 컴퓨터에게 상황에 따라 다른 행동을 시키는 도구입니다.

  • 온도가 높으면 팬 켜기
  • 점수가 90점 이상이면 A
  • 신호가 약하면 경고

즉, 조건문은 현실의 판단 규칙을 코드로 옮기는 과정입니다.

Boolean은 딱 두 값만 가집니다.

  • True : 조건이 참
  • False : 조건이 거짓
is_hot = True
is_raining = False
print(is_hot, is_raining)
  • 조건문, 반복문, 예외 처리의 핵심 재료가 Boolean입니다.
  • 공학 시스템에서 알람/정상/정지 같은 상태 판정은 대부분 Boolean 조합으로 작성됩니다.
연산자의미예시결과
>크다10 > 3True
<작다10 < 3False
==같다5 == 5True
!=다르다5 != 5False
>=크거나 같다70 >= 70True
<=작거나 같다69 <= 70True

잘못된 예와 올바른 예: 비교 연산

Section titled “잘못된 예와 올바른 예: 비교 연산”

Good

score = 90
print(score >= 90) # True

Bad

score = 90
print(score = 90) # 문법 오류 (대입과 비교를 혼동)

설명: =는 값 저장, ==는 값 비교입니다.

float 값을 ==로 비교하면 예상치 못한 결과가 나올 수 있습니다.

print(0.1 + 0.2 == 0.3) # False

0.1 + 0.2는 내부적으로 0.30000000000000004가 됩니다. IEEE 754 부동소수점 표현 방식 때문에 10진수 소수를 2진수로 정확히 나타낼 수 없어 미세한 오차가 생깁니다.

실수 비교에는 허용 오차(tolerance) 패턴을 사용하세요.

measured_v = 3.299999999
expected_v = 3.3
tolerance = 0.001
if abs(measured_v - expected_v) < tolerance:
print("정상 범위")
  • abs(a - b): 두 값의 차이의 절댓값을 구합니다.
  • < tolerance: 차이가 허용 범위 안에 있으면 “같다”고 판단합니다.

조건문 기본 문법: 어떻게 쓰나요?

Section titled “조건문 기본 문법: 어떻게 쓰나요?”

처음 배우는 학생이 가장 많이 헷갈리는 부분은 “어디까지가 조건문 안쪽인가?” 입니다. Python은 C처럼 중괄호 {}를 쓰지 않고, 콜론(:) + 들여쓰기(indentation) 로 블록을 구분합니다.

if condition_1:
# condition_1 이 True일 때 실행
statement_1
statement_2
elif condition_2:
# 앞 조건이 False이고 condition_2 가 True일 때 실행
statement_3
else:
# 위 조건이 모두 False일 때 실행
statement_4
# 들여쓰기가 끝나면 조건문 바깥 코드
statement_5
  1. if 뒤에 조건식을 적는다.
  2. 조건식 끝에 반드시 :를 붙인다.
  3. 다음 줄부터 같은 칸 수(처음에는 4칸 추천) 만큼 들여쓴다.
  4. 같은 블록에 있는 코드는 같은 깊이로 맞춘다.
  5. elif, elseif와 같은 깊이에 둔다.
dust = 82
if dust >= 80:
print("환기 필요")
print("마스크 착용 권장")
else:
print("실내 공기 양호")
print("판정 종료")
  • if dust >= 80: 줄 끝의 :가 블록 시작을 알립니다.
  • 들여쓴 두 줄은 if 블록 안에서 함께 실행됩니다.
  • 마지막 print("판정 종료")는 들여쓰기가 없으므로 조건문 밖에서 항상 실행됩니다.

잘못된 예와 올바른 예: 들여쓰기

Section titled “잘못된 예와 올바른 예: 들여쓰기”

Bad

if dust >= 80:
print("환기 필요")

Good

if dust >= 80:
print("환기 필요")
temperature = 37
if temperature >= 38:
print("fever")
elif temperature >= 35:
print("normal")
else:
print("low")
  • if: 첫 조건 검사
  • elif: 앞 조건이 거짓일 때 추가 검사
  • else: 위 조건이 모두 거짓일 때 실행
  1. 위에서 아래로 검사한다.
  2. 먼저 참이 된 블록 하나만 실행한다.
  3. 따라서 조건 순서 자체가 설계 품질이다.
점수 분기 의사결정
flowchart TD
  A[입력값 score] --> B{score >= 90?}
  B -- Yes --> G[A]
  B -- No --> C{score >= 80?}
  C -- Yes --> H[B]
  C -- No --> D{score >= 70?}
  D -- Yes --> I[C]
  D -- No --> J[D/F 등 다음 규칙]

조건 평가 추적 테이블 (Trace Table)

Section titled “조건 평가 추적 테이블 (Trace Table)”

score = 75일 때 조건문이 어떻게 실행되는지 한 줄씩 따라가 봅니다.

단계검사하는 조건결과동작
1score >= 9075 >= 90False이 블록 건너뜀
2score >= 8075 >= 80False이 블록 건너뜀
3score >= 7075 >= 70Truegrade = "C" 실행 후 종료

조건이 True가 되는 순간, 나머지 elif/else는 검사하지 않고 빠져나옵니다.

다른 값으로도 손으로 직접 추적해 보세요:

score 값1단계 >=902단계 >=803단계 >=704단계 >=60결과
95True(건너뜀)(건너뜀)(건너뜀)A
83FalseTrue(건너뜀)(건너뜀)B
75FalseFalseTrue(건너뜀)C
62FalseFalseFalseTrueD
55FalseFalseFalseFalseF
  • and: 둘 다 참이어야 참
  • or: 하나라도 참이면 참
  • not: 참/거짓 반전
temp = 52
current = 1.9
fan_ok = True
print(temp > 50 and current > 1.8) # True
print(temp > 60 or current > 1.8) # True
print(not fan_ok) # False
  • 길어지면 괄호로 의미 단위를 먼저 나눈다.
  • 중간 결과를 변수로 분리하면 실수가 줄어든다.
is_overheat = temp > 50
is_overcurrent = current > 1.8
is_fan_fail = not fan_ok
if (is_overheat and is_overcurrent) or is_fan_fail:
print("STOP")

조건문 안에 또 조건문을 넣는 방식입니다.

Good (의도 분명)

battery = 18
charging = False
if battery < 20:
if charging:
print("충전 중: 사용 가능")
else:
print("배터리 부족: 충전 필요")
else:
print("배터리 정상")

Bad (과도한 중첩, 읽기 어려움)

# 깊은 중첩은 초보자에게 디버깅 난이도를 크게 올립니다.
# 조건이 많아지면 elif 분기로 단순화하세요.

경계값은 규칙이 바뀌는 지점입니다.

예: if rssi < -70이면 경고

반드시 테스트할 값:

  • 경계 바로 아래: -71
  • 경계 정확히: -70
  • 경계 바로 위: -69

7) C와 비교: 조건문 문법이 이렇게 다릅니다

Section titled “7) C와 비교: 조건문 문법이 이렇게 다릅니다”

C를 먼저 본 학생이라면, Python 조건문에서 아래 차이를 가장 먼저 기억하면 됩니다.

항목CPython기억할 점
블록 구분{ ... }들여쓰기Python에서는 공백이 문법이다
분기 연결else ifelifPython은 한 단어로 쓴다
조건 괄호if (x > 0)if x > 0:괄호는 보통 생략, :는 필수
문장 끝;없음줄바꿈으로 문장을 구분
논리 연산&&, ||, !and, or, not기호 대신 영어 단어 사용
int score = 85;
if (score >= 90) {
printf("A\n");
} else if (score >= 80) {
printf("B\n");
} else {
printf("C or below\n");
}

C 문법을 그대로 가져오면 생기는 실수

Section titled “C 문법을 그대로 가져오면 생기는 실수”

Bad (C 습관을 그대로 쓴 경우)

score = 85
if (score >= 90) {
print("A");
} elif (score >= 80) {
print("B");
}

Good (Python 문법으로 다시 쓰기)

score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B")
else:
print("C or below")
비교 예제 · C식 생각을 Python 조건문으로 바꾸기 Runs in-browser with Pyodide
Ready

핵심은 중괄호 대신 들여쓰기, else if 대신 elif, && 대신 and 를 먼저 떠올리는 것입니다.

  1. 조건문 코드를 보기 전에 입력값 후보를 표로 만든다.
  2. 각 조건이 True/False가 될지 손으로 먼저 예측한다.
  3. 실행 후 실제 분기 결과와 예측을 비교한다.
  4. 틀린 경우 조건 순서와 연산자(and/or/not)를 먼저 점검한다.
  5. 경계값 3점(아래/같음/위)을 추가 실행해 규칙을 확정한다.

점수 하나를 변수에 담고 if/elif/else로 등급을 판정합니다. 값을 직접 바꿔가며 여러 경우를 확인하세요.

예제 1 · 성적 분류기 (단일 값) Runs in-browser with Pyodide
Ready
  1. score = 75: 판정할 점수를 변수 하나에 담습니다. 값을 바꾸면 다른 등급을 확인할 수 있습니다.
  2. if score >= 90:: 가장 높은 등급 조건을 먼저 검사합니다. 참이면 즉시 “A”로 결정되고 아래 조건은 검사하지 않습니다.
  3. elif score >= 80:: 앞 조건(90 이상)이 거짓일 때만 도달합니다. 즉 이 줄에 왔다는 것 자체가 score < 90임을 보장합니다.
  4. elif score >= 70: / elif score >= 60:: 같은 방식으로 범위를 좁혀 갑니다.
  5. else:: 어떤 범위에도 속하지 않으면(60 미만) “F”로 처리합니다.
  6. print("score:", score) / print("grade:", grade): 입력과 결과를 함께 출력해 판정이 맞는지 바로 확인합니다.

시도해 볼 값: 59, 60, 69, 70, 79, 80, 89, 90 — 경계 근처 값을 하나씩 바꿔 보세요.

예제 2 · 안전 상태 판정 (복합 조건)

Section titled “예제 2 · 안전 상태 판정 (복합 조건)”

온도, 전류, 팬 상태 세 변수를 조합해 장비 상태를 판정합니다. 변수 값을 직접 바꿔가며 어떤 조합이 STOP/CHECK/RUN을 만드는지 확인하세요.

예제 2 · 안전 상태 판정 (단일 케이스) Runs in-browser with Pyodide
Ready
  1. temp = 52 / current = 2.0 / fan_ok = True: 세 변수가 하나의 케이스를 나타냅니다. 값을 바꾸면 다른 케이스를 시뮬레이션할 수 있습니다.
  2. if (temp > 50 and current > 1.8) or (not fan_ok):: 가장 위험한 조건을 최우선으로 배치합니다. 과열+과전류이거나 팬이 고장나면 즉시 STOP입니다.
  3. elif temp >= 42 or current >= 1.5:: 즉시 정지는 아니지만 점검이 필요한 상태를 분리합니다.
  4. else:: 위 조건이 모두 아니면 정상 운전입니다.
  5. print(...): 입력 값 세 개와 판정 결과를 함께 출력해 판정 근거를 추적합니다.

시도해 볼 케이스:

  • temp=39, current=1.1, fan_ok=True → RUN 예상
  • temp=52, current=2.0, fan_ok=True → STOP 예상
  • temp=45, current=1.6, fan_ok=False → STOP 예상 (팬 고장)
  • temp=42, current=1.4, fan_ok=True → CHECK 예상

흔한 실수: 잘못된 예와 올바른 예

Section titled “흔한 실수: 잘못된 예와 올바른 예”

Bad

if score >= 80:
grade = "B"
elif score >= 90:
grade = "A" # 도달 불가

Good

if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"

설명: 넓은 범위를 먼저 검사하면 더 엄격한 조건이 가려집니다.

Bad

if temp > 50 and current > 1.8 or not fan_ok:
status = "STOP"

Good

if (temp > 50 and current > 1.8) or (not fan_ok):
status = "STOP"

설명: 결과는 같을 수 있어도, Good 코드는 읽는 사람이 즉시 의도를 파악할 수 있습니다.

Bad

# 70 근처 값을 전혀 테스트하지 않고 넘어감
score = 85

Good

# score 값을 직접 바꿔가며 69, 70, 71 같은 경계값을 테스트하세요.
score = 70 # 경계 정확히
# 다음에는 69, 71로 바꿔서 각각 실행해 보세요.

설명: 조건문 오류의 대부분은 경계값에서 드러납니다. 경계 아래/같음/위 세 값을 반드시 직접 실행해 확인하세요.

실수증상원인해결
=== 혼동문법 오류/오동작대입/비교 개념 혼동저장은 =, 비교는 ==로 구분
조건 순서 역전높은 등급이 안 나옴큰 범위를 먼저 검사가장 엄격한 조건부터 배치
<, <= 경계 실수특정 값에서 오판정경계 정의 불명확경계값 표 + 3점 테스트
and/or 오해예상과 다른 분기논리식을 추측으로 작성괄호 + 중간 불리언 변수 사용
들여쓰기 오류블록 실행 누락파이썬 블록 구조 미숙같은 블록 4칸 규칙 유지
중첩 과다읽기/디버깅 어려움한 함수에 규칙 과도elif 단순화 또는 함수 분리
테스트 생략과제/실험에서 실패정상 케이스만 확인경계 포함 최소 3점(아래/같음/위) 검증

문제 (기초): 점수(0~100) 하나를 변수에 담아 A/B/C/D/F 등급을 출력하세요.

값을 바꿔가며 90, 80, 70, 60 경계 근처도 확인해 보세요.

실습 1 · 성적 분류기 (단일 값) Runs in-browser with Pyodide
Ready