! 지금까지는 파이썬의 여러 자료형에 대해서 알아보았다.
다음과 같은 상황을 생각해 보자.
비가 오면 우산을 가져간다.
비가 오지 않으면 우산을 가져가지 않는다.
비가 오는가?
우산을 가져간다.
우산을 가져가지 않는다.
파이썬에서는 이러한 상황을
if문으로 표현할 수 있다.
rain = True
if rain:
print("우산을 가져간다.")
else:
print("우산을 가져가지 않는다.")
우산을 가져간다.
현재
rain변수에는True가 저장되어 있다.
rain = True
따라서
if rain:
의 조건은 참이 된다.
rain → True
↓
if 블록 실행
그래서
print("우산을 가져간다.")
가 실행된다.
반대로
rain이False라면 어떻게 될까?
rain = False
if rain:
print("우산을 가져간다.")
else:
print("우산을 가져가지 않는다.")
우산을 가져가지 않는다.
즉,
if문은 조건이 참인지 거짓인지 판단해서 실행할 코드를 선택한다.
if와 else를 사용하는 가장 기본적인 형태는 다음과 같다.
if 조건:
조건이 참일 때 실행할 문장
else:
조건이 거짓일 때 실행할 문장
조금 더 자세히 표현하면 다음과 같다.
if 조건:
실행문1
실행문2
실행문3
else:
실행문4
실행문5
True이면 if 아래의 코드가 실행된다.False이면 else 아래의 코드가 실행된다. 조건
│
┌────┴────┐
True False
│ │
▼ ▼
if 영역 else 영역
예를 들어
age = 20
if age >= 18:
print("성인입니다.")
else:
print("미성년자입니다.")
성인입니다.
조건을 확인해 보면
age >= 18
은
20 >= 18
↓
True
이므로 if 영역이 실행된다.
else는 반드시 사용할 필요는 없다.
age = 20
if age >= 18:
print("성인입니다.")
성인입니다.
else를 생략할 수 있다.하지만
else만 단독으로 사용할 수는 없다.
else:
print("실행")
위와 같은 코드는 사용할 수 없다.
if → 단독 사용 가능
else → if와 함께 사용
파이썬에서
if문을 사용할 때 매우 중요한 것이 들여쓰기(indentation)이다.
다음 코드를 보자.
age = 20
if age >= 18:
print("성인입니다.")
print("입장 가능합니다.")
print()가 같은 깊이로 들여쓰기되어 있다.if문에 포함된다.파이썬에서는 들여쓰기를 이용해서 어떤 코드가 if문에 포함되는지 구분한다.
if 조건:
실행문1
실행문2
이를 구조로 보면
if 조건:
├─ 실행문1
└─ 실행문2
와 같이 생각할 수 있다.
다음 코드와 비교해 보자.
age = 20
if age >= 18:
print("성인입니다.")
print("프로그램 종료")
성인입니다.
프로그램 종료
print()는 들여쓰기되어 있으므로 if문에 포함된다.print()는 들여쓰기되어 있지 않기 때문에 if문과 관계없이 실행된다.들여쓰기가 맞지 않으면 오류가 발생할 수 있다.
if True:
print("첫 번째")
print("두 번째")
따라서 다음처럼 맞춰 주어야 한다.
if True:
print("첫 번째")
print("두 번째")
파이썬에서는 일반적으로 들여쓰기에 공백 4칸을 사용한다.
if 조건:
····print("실행")
· 하나를 공백 한 칸이라고 생각하면 된다.
공백 4칸 → 일반적인 파이썬 들여쓰기
에디터에서는
Tab을 눌러도 자동으로 공백 4칸으로 처리되는 경우가 많다.
! 중요
들여쓰기에서 가장 중요한 것은 같은 영역의 코드가 같은 깊이를 가지는 것이다.
파이썬의
if문 조건 뒤에는 반드시 콜론:을 작성해야 한다.
if age >= 18:
다음처럼 작성하면 안 된다.
if age >= 18
print("성인")
올바른 형태는 다음과 같다.
if age >= 18:
print("성인")
콜론
:은 앞으로 배우게 될while,for, 함수, 클래스 등에서도 계속 등장한다.
if 조건:
while 조건:
for 변수 in 값:
조건문 끝 → :
다음 줄 → 들여쓰기
if뒤에는 참(True) 또는 거짓(False)을 판단할 수 있는 값이나 표현식이 들어간다.
예를 들어
money = True
if money:
print("사용 가능")
에서 조건은
money
이다.
현재
money = True
이므로 조건이 참이다.
비교 연산식을 조건으로 사용할 수도 있다.
age = 20
if age >= 18:
print("성인")
여기서 조건은
age >= 18
이다.
조건식의 결과는 결국 다음 둘 중 하나가 된다.
True
False
조건을 만들 때 가장 많이 사용하는 것이 비교 연산자이다.
| 비교 연산자 | 의미 |
|---|---|
x < y | x가 y보다 작다 |
x > y | x가 y보다 크다 |
x == y | x와 y가 같다 |
x != y | x와 y가 다르다 |
x >= y | x가 y보다 크거나 같다 |
x <= y | x가 y보다 작거나 같다 |
x = 3
y = 2
print(x > y)
True
왜냐하면
3 > 2
는 참이기 때문이다.
print(x < y)
False
3 < 2
↓
False
==는 두 값이 같은지 비교한다.
x = 3
y = 2
print(x == y)
False
여기서
=와==를 다시 한번 구분하자.
x = 3
= → 값을 저장
x == 3
== → 두 값이 같은지 비교
!=는 두 값이 다른지 확인한다.
x = 3
y = 2
print(x != y)
True
3과 2는 다른가?
↓
True
money = 2000
if money >= 3000:
print("택시를 이용한다.")
else:
print("걸어간다.")
걸어간다.
조건은
money >= 3000
이다.
현재 money는 2000이므로
2000 >= 3000
↓
False
따라서 else가 실행된다.
여러 조건을 함께 판단하고 싶다면 논리 연산자를 사용할 수 있다.
| 연산자 | 의미 |
|---|---|
and | 두 조건 모두 참이어야 참 |
or | 둘 중 하나라도 참이면 참 |
not | 참과 거짓을 반대로 변경 |
and는 양쪽 조건이 모두 참일 때만 True가 된다.
age = 20
has_ticket = True
if age >= 18 and has_ticket:
print("입장 가능합니다.")
입장 가능합니다.
조건을 나누어 보면
age >= 18
20 >= 18
→ True
그리고
has_ticket
→ True
따라서
True and True
↓
True
가 된다.
| A | B | A and B |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
and = 둘 다 참이어야 참
or는 두 조건 중 하나라도 참이면 True가 된다.
money = 2000
card = True
if money >= 3000 or card:
print("결제할 수 있습니다.")
else:
print("결제할 수 없습니다.")
결제할 수 있습니다.
조건을 나누어 보면
money >= 3000
2000 >= 3000
→ False
하지만
card
→ True
이므로
False or True
↓
True
가 된다.
| A | B | A or B |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
or = 하나라도 참이면 참
not은 참과 거짓을 반대로 바꾼다.
login = False
print(not login)
True
not True → False
not False → True
조건문에서도 사용할 수 있다.
login = False
if not login:
print("로그인이 필요합니다.")
로그인이 필요합니다.
in은 특정 값이 리스트, 튜플, 문자열 등에 포함되어 있는지 확인할 때 사용한다.
1 in [1, 2, 3]
True
뜻을 그대로 해석하면 된다.
1이 [1, 2, 3] 안에 있는가?
↓
True
not in은 반대로 값이 포함되어 있지 않은지 확인한다.
1 not in [1, 2, 3]
False
왜냐하면 1은 실제로 리스트 안에 존재하기 때문이다.
numbers = [1, 2, 3]
print(2 in numbers)
True
letters = ('a', 'b', 'c')
print('a' in letters)
True
text = "python"
print('p' in text)
True
print('j' not in text)
True
pocket = ['phone', 'wallet', 'money']
if 'money' in pocket:
print("돈이 있습니다.")
else:
print("돈이 없습니다.")
돈이 있습니다.
조건은
'money' in pocket
이다.
'money'가 pocket에 있는가?
↓
True
따라서 if 영역이 실행된다.
조건은 만들었지만 조건이 참일 때 아무 작업도 하고 싶지 않은 경우가 있을 수 있다.
이때 pass를 사용할 수 있다.
pocket = ['phone', 'money']
if 'money' in pocket:
pass
else:
print("돈이 없습니다.")
'money'가 존재하기 때문에 조건은 True이다.pass는 아무 작업도 하지 않는다.다음처럼 빈 코드 영역을 만들면 오류가 발생한다.
if True:
따라서 아직 실행할 코드를 작성하지 않았다면
if True:
pass
처럼 사용할 수 있다.
pass
→ 아무 작업도 하지 않고 넘어감
if와else만으로는 두 가지 상황만 간단하게 구분할 수 있다.
그런데 다음처럼 조건이 여러 개라면 어떨까?
90점 이상 → A
80점 이상 → B
70점 이상 → C
그 외 → D
이럴 때 사용하는 것이 elif이다.
if 조건1:
실행문1
elif 조건2:
실행문2
elif 조건3:
실행문3
else:
실행문4
예제를 만들어 보자.
score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
else:
print("D")
B
첫 번째 조건을 확인한다.
85 >= 90
↓
False
다음 elif를 확인한다.
85 >= 80
↓
True
따라서
print("B")
가 실행된다.
여기서 중요한 점이 있다.
B 조건이 참이 된 이후에는 아래의 조건을 더 이상 검사하지 않는다.
if → False
elif → True ← 여기 실행
아래 elif → 검사하지 않음
else → 실행하지 않음
if 조건1:
...
elif 조건2:
...
elif 조건3:
...
elif 조건4:
...
else:
...
조건이 많다면 필요한 만큼
elif를 사용할 수 있다.
if
↓
첫 번째 조건 검사
elif
↓
이전 조건이 거짓이면 다음 조건 검사
else
↓
앞의 모든 조건이 거짓일 때 실행
if문 안에 또 다른 if문을 넣을 수도 있다.
age = 20
has_ticket = True
if age >= 18:
if has_ticket:
print("입장 가능합니다.")
else:
print("티켓이 필요합니다.")
else:
print("미성년자는 입장할 수 없습니다.")
구조를 살펴보면 다음과 같다.
if age >= 18:
│
├─ True
│ │
│ └─ if has_ticket:
│ ├─ True → 입장 가능
│ └─ False → 티켓 필요
│
└─ False → 미성년자
중첩 if문은 사용할 수 있지만 너무 많이 중첩하면 코드가 복잡해질 수 있다.
가능하다면
if age >= 18 and has_ticket:
처럼 논리 연산자를 이용해서 단순하게 만들 수 있는지도 생각해 보는 것이 좋다.
실행할 코드가 매우 간단한 경우 한 줄로 작성할 수도 있다.
일반적인 형태는
if 'money' in pocket:
pass
else:
print("카드를 사용한다.")
이다.
이를 다음처럼 작성할 수도 있다.
if 'money' in pocket: pass
else: print("카드를 사용한다.")
문법적으로 가능하지만 처음 공부할 때는 여러 줄로 작성하는 것이 읽기 쉽다.
if 조건:
실행문
else:
실행문
코드를 짧게 만드는 것보다 읽기 쉽게 만드는 것이 더 중요하다.
파이썬에서는 하나의 값을 여러 경우와 비교해야 할 때
match-case문을 사용할 수도 있다.
match-case는 Python 3.10 이상에서 사용할 수 있다.
예를 들어 학점을 확인한다고 해 보자.
grade = 'B'
if grade == 'A':
print("매우 우수")
elif grade == 'B':
print("우수")
elif grade == 'C':
print("보통")
else:
print("재도전")
우수
같은 작업을
match-case로 작성할 수 있다.
grade = 'B'
match grade:
case 'A':
print("매우 우수")
case 'B':
print("우수")
case 'C':
print("보통")
case _:
print("재도전")
우수
match 변수:
case 값1:
실행문
case 값2:
실행문
case 값3:
실행문
case _:
실행문
위에서부터 값을 비교한다.
변수 == 값1 ?
↓ 아니오
변수 == 값2 ?
↓ 예
해당 case 실행
case _는 앞의 어떤 경우에도 해당하지 않을 때 사용한다.
case _:
print("기타")
if문에서의
else:
와 비슷한 역할을 한다고 생각하면 된다.
|를 사용하면 여러 패턴을 하나의case에서 처리할 수 있다.
grade = 'B'
match grade:
case 'A' | 'B' | 'C':
print("통과")
case _:
print("재시험")
통과
'A' 또는 'B' 또는 'C'
↓
같은 case 실행
파이썬에서는 여러 비교 연산자를 수학식처럼 이어서 사용할 수 있다.
x = 5
print(1 < x < 10)
True
이 코드는 다음과 같은 의미이다.
1 < x
그리고
x < 10
즉,
(1 < x) and (x < 10)
과 같은 의미이다.
x = 5
print((1 < x) and (x < 10))
True
파이썬에서는 다음 표현이 더 자연스럽고 간결하다.
1 < x < 10
예를 들어 점수가 0점 이상 100점 이하인지 확인하고 싶다면
score = 85
if 0 <= score <= 100:
print("정상적인 점수입니다.")
처럼 사용할 수 있다.
다음 표현과 같은 의미이다.
if score >= 0 and score <= 100:
0 <= score <= 100
0 이상이고 100 이하
간단한
if-else를 한 줄로 작성하는 방법도 있다.
이를 조건부 표현식이라고 한다.
예를 들어 다음 코드가 있다고 하자.
score = 85
if score >= 60:
result = "합격"
else:
result = "불합격"
print(result)
합격
조건부 표현식을 사용하면 다음처럼 작성할 수 있다.
score = 85
result = "합격" if score >= 60 else "불합격"
print(result)
합격
변수 = 참일_때_값 if 조건 else 거짓일_때_값
읽는 순서는 다음과 같다.
조건 확인
│
┌──┴──┐
참 거짓
│ │
▼ ▼
앞 값 뒤 값
예를 들어
age = 20
status = "성인" if age >= 18 else "미성년자"
에서 조건은
age >= 18
이다.
20 >= 18
↓
True
따라서
status = "성인"
이 된다.
result = "합격" if score >= 60 else "불합격"
처음 보면 읽기 어려울 수 있다.
다음 순서로 생각하면 쉽다.
score >= 60 인가?
↓
True면 "합격"
False면 "불합격"
조건부 표현식은 조건과 결과가 간단할 때 사용하면 편리하다.
result = "짝수" if number % 2 == 0 else "홀수"
하지만 조건이 복잡하거나 실행해야 할 코드가 많다면
if 조건:
...
else:
...
형태로 작성하는 것이 읽기 쉽다.
if, elif, else를 전체적으로 정리해 보자.
score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
else:
print("D")
실행 과정은 다음과 같다.
score = 85
↓
85 >= 90 ?
│
False
↓
85 >= 80 ?
│
True
↓
"B" 출력
↓
조건 검사 종료
한 번 조건이 참이 되면 그 아래
elif와else는 실행하지 않는다.
if age >= 18
print("성인")
❌ 잘못된 코드
if age >= 18:
print("성인")
⭕ 올바른 코드
age = 20
→ 값을 저장
age == 20
→ 값이 같은지 비교
if age >= 18:
print("성인")
print("입장 가능")
❌ 들여쓰기 깊이가 다르다.
if age >= 18:
print("성인")
print("입장 가능")
⭕ 같은 if 영역이므로 들여쓰기 깊이를 맞춘다.
다음 코드를 보자.
score = 95
if score >= 60:
print("합격")
elif score >= 90:
print("우수")
합격
95 >= 60이 먼저 True가 되어 버린다.elif score >= 90은 검사하지 않는다.따라서 범위를 판단할 때는 보통 더 구체적이거나 높은 조건부터 작성한다.
score = 95
if score >= 90:
print("우수")
elif score >= 60:
print("합격")
else:
print("불합격")
우수
이번 장에서 가장 중요한 내용을 정리하면 다음과 같다.
if 조건:
실행문
조건이 True → 실행
조건이 False → 실행하지 않음
if 조건:
참일 때 실행
else:
거짓일 때 실행
if 조건1:
실행문1
elif 조건2:
실행문2
else:
실행문3
> 크다
< 작다
>= 크거나 같다
<= 작거나 같다
== 같다
!= 다르다
and → 둘 다 참이어야 참
or → 하나라도 참이면 참
not → 참/거짓 반대로
값 in 자료형
→ 값이 있는지 확인
값 not in 자료형
→ 값이 없는지 확인
if 조건:
pass
→ 아무 작업도 하지 않는다.
match 값:
case 값1:
실행
case 값2:
실행
case _:
실행
→ 하나의 값을 여러 경우로 나누어 처리할 때 사용할 수 있다.
1 < x < 10
→ x가 1보다 크고 10보다 작은지 확인
result = "합격" if score >= 60 else "불합격"
→ 간단한 if-else를 한 줄로 표현
! if문에서 반드시 기억해야 할 핵심
if문은 결국 조건의 결과가 True인지 False인지 판단하는 문법이다.조건 │ ├─ True → 해당 코드 실행 │ └─ False → 실행하지 않거나 else 실행기본 형태는 반드시 기억하자.
if 조건: 실행문 elif 다른조건: 실행문 else: 실행문그리고 파이썬에서는
{}가 아니라 들여쓰기를 이용해서 코드 영역을 구분한다.조건 뒤에는 : 조건에 포함되는 코드는 들여쓰기마지막으로 조건을 만들 때 가장 많이 사용하는 것은 다음과 같다.
비교 → ==, !=, >, <, >=, <= 조건 연결 → and, or, not 포함 확인 → in, not in
if문을 확실하게 이해하면 앞으로 배우게 될while,for도 훨씬 쉽게 이해할 수 있다.