이제 제어
라는 주제로 넘어갑니다. 그동안 제어가 없는 코드를 작성했는데, 이 경우 위에서 아래로 멈추지 않고 코드가 진행됩니다. 프로그래밍 분야에서 '제어'는 어느 코드를 실행할지를 결정하는 주체인데, 이번에는 if
를 이용해 조건문을 작성하고, 코드의 흐름을 제어해 봅시다. if [condition]
형태로 작성합니다.
if문 작성하기
if
는 Python에서 조건문을 작성하기 위한 키워드로, 조건을 판단하여 해당 조건에 맞는 작업을 수행하는 데 쓰입니다.
if True: | |
# 타 프로그래밍 언어에서 중괄호({})로 사용하는 '블럭'은 콜론(:)을 사용 | |
print('True!') | |
flag_1 = True | |
flag_2 = False | |
if flag_1: | |
print('flag_1 is True') | |
if flag_2: | |
print('flag_2 is True') | |
else: | |
# 상위 if의 조건식이 True가 아니라면 | |
print('flag_2 is False') | |
if flag_2: | |
print('flag_2 is True') | |
elif flag_1: | |
# 상위 if의 조건식이 True가 아니라면 | |
print('flag_1 is True') | |
else: | |
# 상위 elif의 조건식이 True가 아니라면 | |
print('all flags are False') |
다른 프로그래밍 언어에서 블럭을 표현하기 위해 중괄호({})를 사용하는 데에 반해, Python에서는 콜론(:)과 들여쓰기로 블럭을 표현합니다. 조건문은 if, elif, else를 혼합해서 사용할 수 있으며, elif
는 타 언어의 else if
구문과 동일한 역할입니다. elif와 else는 상위의 if문 없이 단독으로 사용 불가능합니다.
비교 연산자
조건문은 True나 False로 평가되는 condition
을 판단합니다. a가 10보다 큰 경우
와 같은 조건식을 작성하려면, 비교 연산자를 사용할 수 있습니다.
- x < y : x가 y보다 작은 경우 True
- x <= y : x가 y보다 작거나 같은 경우 True
- x > y : x가 y보다 큰 경우 True
- x >= y : x가 y보다 크거나 같은 경우 True
- x == y : x와 y가 같은 경우 True
- x != y : x와 y가 다른 경우 True
a = 6 | |
if a > 10: | |
print('a is over than 10') | |
elif a % 2: | |
# 홀수인 경우 1 반환, 1은 True로 평가됨 | |
# a(6) % 2 = 0이므로 False | |
print('a is odd') | |
elif a > 7: | |
print('a is over than 7') | |
else: | |
print(a) | |
# 모든 조건에 만족하지 않으므로 6 출력 |
비교 연산자는 chaining(이어 붙이기)
가능합니다. a가 5 이상, 10이하인 경우
는 5 <= a and a <= 10
이라는 조건식을 사용할 수도 있지만, 아래처럼 비교 연산자를 체이닝하는 것이 더 직관적입니다.
a = 7 | |
if 5 <= a <= 10: | |
print('a is between 5 and 10') |
논리 연산자
a가 10보다 크고 짝수인 경우
와 같은 조건식을 작성하려면, 논리 연산자
를 사용할 수 있습니다. 타 언어에선 &&, ||, !와 같은 키워드로 사용되는데, Python은 이들을 and, or, not과 같이 키워드로서 표현합니다.
a = 14 | |
if a > 10 and not a % 2: | |
# a가 10보다 크고 짝수인 경우 | |
# 짝수면 a % 2가 0, 여기에 not을 붙이면 True | |
print('a is over than 10 and even number') | |
if a > 20 or not a % 2: | |
# a가 20보다 크거나 짝수인 경우 | |
print('a is over than 20 or even number') | |
in 키워드
Python은 iterable 자료형을 정말 잘 지원하고 있다고 했습니다. 특정 값 x가 iterable 자료형에 들어 있는지를 검사하려면 in
키워드를 사용하면 됩니다. 또한, Bool 연산자인 not
은 in에도 적용 가능하므로 '해당 값이 들어 있지 않은지'도 검사할 수 있습니다.
if 1 in [1, 2, 3, 4, 5]: | |
print('1 in [1, 2, 3, 4, 5]') | |
if 'p' not in 'PlanB': | |
print("'p' not in 'PlanB'") |
삼항 연산자
True일 때 x 리턴, False일 때 y 리턴
과 같은 로직을 작성하려면, 아래처럼 if문을 작성할 수 있습니다.
d = {'name': '조민규'} | |
if 'nickname' in d: | |
print(d['nickname']) | |
else: | |
print(d['name']) |
'nickname' 이라는 key가 딕셔너리에 있으면 d['nickname']을 출력하고, 없으면 d['name']을 출력하는 코드입니다. Python은 삼항 연산자
를 지원하며, 아래처럼 사용할 수 있습니다.
d = {'name': '조민규'} | |
print(d['nickname' if 'nickname' in d else 'name']) |
[condition이 True일 때의 리턴값] if [condition] else [condition이 False일 때의 리턴값]
형태로 사용합니다. 물음표와 콜론을 사용하는 타 언어의 삼항 연산자와 비교하더라도 의외로 가독성이 높습니다.
'Python 계열 > Python 레거시 글' 카테고리의 다른 글
[Python] 반복문 - while (0) | 2018.06.23 |
---|---|
[Python] 반복문 - for (0) | 2018.06.22 |
[Python] Iterable 자료형 - Dictionary, Set (0) | 2018.06.20 |
[Python] Iterable 자료형 - List, Tuple (1) | 2018.06.19 |
[Python] 변수와 기본 자료형 (0) | 2018.06.18 |