본문 바로가기
C.W.K.
Stream
Lesson 01 of 07 · published

if·elif·else — 조건을 곧게 읽히게 쓰기

~18 min · if, elif, branching, truthiness

Level 0호기심
0 XP0/93 lessons0/23 achievements
0/100 XP to next level100 XP to go0% complete

위에서 아래로 처음 맞는 길을 고른다

if의 조건이 참이면 그 블록을 실행하고, 아니면 elif를 차례로 검사해. 어느 조건도 맞지 않으면 else가 맡아. 서로 겹치는 조건은 더 구체적인 것을 먼저 두어야 뒤의 분기가 가려지지 않아.

값 자체의 참과 거짓

0, 빈 문자열, 빈 컨테이너, None은 거짓으로 평가되고 나머지 대부분은 참이야. 그래서 if items:는 비어 있지 않은지를 자연스럽게 물어. == True== False를 덧붙이면 뜻만 길어져.

짧은 선택과 연쇄 비교

A if condition else B는 값 하나를 고르는 짧은 조건부 표현식이야. 여러 동작을 넣지 말고 한 선택에만 써. 0 <= score < 100처럼 비교를 이어 쓰면 수학식과 같은 순서로 읽히고 가운데 값도 한 번만 평가돼.

원칙: 정상적인 길을 먼저 보이게 하고, 예외적인 조건은 짧은 분기나 이른 반환으로 걷어내.

Code

값이 조건식에서 참과 거짓이 되는 규칙·python
# Falsy 값들
for x in [None, False, 0, 0.0, "", [], {}, set(), ()]:
    if x:
        print("truthy")
    else:
        print("falsy")
# 다 'falsy' 출력

# idiomatic 빈 체크
items = []
if items:                         # vs. if len(items) > 0:
    print("have items")
else:
    print("empty")               # 이게 출력

# 근데 — None 과 empty 는 다른 거
user = None
if user is None:
    print("사용자 자체가 없음")
elif not user:
    print("사용자는 있는데 비어있음")
else:
    print("내용 있는 사용자")
값 하나를 고르는 조건부 표현식·python
n = 7
label = "odd" if n % 2 else "even"
print(label)              # 'odd'

# 흔함: 디폴트 값 선택
user_input = ""
name = user_input or "anonymous"
print(name)               # 'anonymous'

# `or` 는 첫 truthy 값을 반환 — 반드시 True 가 아님
print(0 or 5 or 99)       # 5
print([] or [1])          # [1]

# `and` 는 첫 falsy 값 또는 마지막 값 반환
print(1 and 2 and 3)      # 3
print(1 and 0 and 3)      # 0   (short-circuit)
수학식처럼 읽히는 연쇄 비교·python
x = 5
# 체인 — Python 만
if 1 < x < 10:
    print("in range")

# 같은 의미
if 1 < x and x < 10:
    print("same idea")

# 근데 — x 는 한 번만 평가됨
def get_x():
    print("computing x")
    return 5

if 1 < get_x() < 10:
    print("computed once")
# 'computing x' 한 번만 출력
True·False와 다시 비교하지 않기·python
active = True

# 안 좋음
if active == True:
    pass

# 좋음
if active:
    pass

# 더 중요한 이유 — active 가 truthy 인데 진짜 True 가 아닐 때
active = 1            # int 1, bool True 가 아님
if active == True:    # True (1 == True 가 True 라서)
    print("compares")
active = "yes"
if active == True:    # False
    print("이건 안 출력")
if active:            # truthy
    print("이건 출력")

External links

Exercise

classify(score)를 만들어 100은 'perfect', 70 이상 100 미만은 'pass', 0 이상 70 미만은 'retry', 그 밖의 값은 'invalid'를 돌려줘. 연쇄 비교와 조건부 표현식을 알맞은 곳에 쓰고, None은 is None으로 따로 처리해. 최소 여섯 입력으로 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.