[파이썬 개념 5] 조건문
지금까지의 코드는 위에서 아래로 모든 줄이 실행되었습니다. 조건문을 쓰면 상황에 따라 실행할 코드를 고를 수 있습니다.
조건문을 짤 때 가장 중요한 것은 문법보다 어떤 조건을 어떤 순서로 검사할지 정하는 일입니다.
1. if
score = 85
if score >= 60:
print("통과")
print("축하합니다")
print("끝")
실행 결과
통과
축하합니다
끝
if뒤에 조건을 쓰고 콜론:을 붙입니다.- 조건이 참일 때 실행할 코드는 들여쓰기합니다. 스페이스 4칸이 약속입니다.
- 들여쓰기한 줄들이 하나의 블록입니다. 들여쓰기가 끝난
print("끝")은 조건과 상관없이 실행됩니다.
score 를 50으로 바꾸면 "끝" 만 출력됩니다.
문법 오류 두 가지
score = 85
if score >= 60
print("통과")
실행 결과
SyntaxError: expected ':'
score = 85
if score >= 60:
print("통과")
실행 결과
IndentationError: expected an indented block after 'if' statement on line 2
콜론과 들여쓰기는 파이썬에게 "여기부터 조건 안쪽"이라는 표시입니다. 둘 중 하나라도 빠지면 실행조차 되지 않습니다.
2. if - else
조건이 거짓일 때 할 일은 else 아래에 씁니다. 둘 중 반드시 하나만 실행됩니다.
n = 7
if n % 2 == 0:
print("짝수")
else:
print("홀수")
실행 결과
홀수
3. if - elif - else
경우가 셋 이상이면 elif(else if)를 씁니다.
score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
else:
print("F")
실행 결과
B
동작 순서는 이렇습니다.
- 위에서부터 차례로 조건을 검사한다.
- 처음으로 참이 된 블록 하나만 실행한다.
- 나머지는 검사하지 않고 조건문 전체를 빠져나간다.
- 모두 거짓이면
else를 실행한다.else는 없어도 된다.
85점은 score >= 90 에서 거짓, score >= 80 에서 참이므로 B를 출력하고 끝납니다.
elif score >= 80 에는 사실 "90 미만이고" 라는 뜻이 숨어 있습니다. 위 조건이 거짓이어야 여기까지 내려오기 때문입니다.
4. 조건의 순서가 결과를 바꾼다
조건의 순서만 바꾸어 봅시다.
score = 95
if score >= 70:
print("C")
elif score >= 80:
print("B")
elif score >= 90:
print("A")
else:
print("F")
실행 결과
C
95점이 score >= 70 에서 이미 참이 되어 C가 나왔습니다. 그 아래 조건은 검사조차 하지 않습니다.
이것이 조건문에서 가장 흔한 실수입니다. 범위가 겹치는 조건은 다음 중 한 방법으로 정리합니다.
- 큰 기준부터 검사한다. (90 이상 → 80 이상 → 70 이상)
- 좁은 조건부터 검사한다. (15의 배수 → 3의 배수 → 5의 배수)
- 범위를 겹치지 않게 양쪽을 모두 쓴다. (
80 <= score < 90)
for i in [9, 10, 15]:
if i % 15 == 0:
print(i, "짝쿵")
elif i % 3 == 0:
print(i, "짝")
elif i % 5 == 0:
print(i, "쿵")
실행 결과
9 짝
10 쿵
15 짝쿵
5. if 를 여러 개 쓰는 것과 elif 의 차이
score = 95
if score >= 90:
print("A")
if score >= 80:
print("B")
실행 결과
A
B
if 를 따로 쓰면 각각 독립적으로 검사되어 둘 다 실행됩니다.
하나만 골라야 할 때는 elif, 해당하는 것을 모두 해야 할 때는 if 를 여러 개 씁니다.
6. 중첩 조건문
조건문 안에 조건문을 쓸 수 있습니다. 들여쓰기가 한 단계 더 깊어집니다.
uid, pw = "pureum", "0000"
if uid == "pureum":
if pw == "1234":
print("로그인 성공")
else:
print("비밀번호 오류")
else:
print("없는 아이디")
실행 결과
비밀번호 오류
같은 일을 and 로 펼쳐 쓸 수도 있습니다.
uid, pw = "pureum", "0000"
if uid != "pureum":
print("없는 아이디")
elif pw != "1234":
print("비밀번호 오류")
else:
print("로그인 성공")
실행 결과
비밀번호 오류
두 방법 모두 맞습니다. 먼저 걸러 낼 것(아이디가 없는 경우)을 위에 두면 아래 조건이 단순해집니다.
7. 여러 조건 묶기와 우선 검사
a, b, c = 100, 100, 39
if a < 40 or b < 40 or c < 40:
print("과락")
elif (a + b + c) / 3 >= 60:
print("합격")
else:
print("불합격")
실행 결과
과락
평균은 79점이 넘지만 한 과목이 40점 미만이라 과락입니다. 평균보다 과락을 먼저 검사했기 때문입니다.
"다른 조건과 상관없이" 라는 말이 있는 규칙은 맨 위에서 검사합니다.
8. 한 줄 조건식
간단한 경우에는 한 줄로 쓸 수 있습니다.
n = 7
kind = "짝수" if n % 2 == 0 else "홀수"
print(kind)
실행 결과
홀수
처음에는 여러 줄로 쓰고, 익숙해지면 한 줄 조건식을 써 봅시다.
9. 조건문 설계 순서
- 문제에서 경우가 몇 가지인지 센다.
- 경우마다 조건을 말로 적는다. (이상, 미만 같은 경계까지)
- 먼저 걸러야 하는 것("상관없이", "하나라도")을 위로 올린다.
- 범위가 겹치면 큰 기준부터 또는 좁은 조건부터 놓는다.
- 경계값(딱 60, 딱 0)을 넣어 직접 확인한다.
정리
if 조건:뒤에는 콜론, 블록은 들여쓰기 4칸.if-elif-else는 위에서부터 검사해 처음 참인 것 하나만 실행한다.- 조건의 순서가 결과를 바꾼다. 겹치는 조건은 큰 기준부터, 좁은 조건부터.
- 하나만 고를 때는
elif, 모두 해야 할 때는if여러 개.
확인 문제
- 다음 코드에서
x = 0일 때와x = -5일 때의 출력은?if x > 0: print("양수") elif x == 0: print("영") print("끝") - 성적 등급 코드에서
elif score >= 80:이 실행되었다면, score 는 어떤 범위에 있는 것인가요? - "벌점이 있으면 다른 조건과 상관없이 탈락" 규칙은 조건문의 어느 위치에 두어야 하나요?
연습해 보기
확인 문제 정답
x = 0이면영과끝,x = -5이면끝만 출력합니다. (else가 없으므로)- 80 이상 90 미만입니다. 위의
score >= 90이 거짓이어야 내려오기 때문입니다. - 맨 위입니다. 다른 조건보다 먼저 검사해야 합니다.
댓글 0
로그인하면 댓글을 쓸 수 있습니다.