이제 제어라는 주제로 넘어갑니다. 그동안 제어가 없는 코드를 작성했는데, 이 경우 위에서 아래로 멈추지 않고 코드가 진행됩니다. 프로그래밍 분야에서 '제어'는 어느 코드를 실행할지를 결정하는 주체인데, 이번에는 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')
view raw if.py hosted with ❤ by GitHub

다른 프로그래밍 언어에서 블럭을 표현하기 위해 중괄호({})를 사용하는 데에 반해, 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'")
view raw in.py hosted with ❤ by GitHub

삼항 연산자

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'])
view raw ternary.py hosted with ❤ by GitHub

[condition이 True일 때의 리턴값] if [condition] else [condition이 False일 때의 리턴값] 형태로 사용합니다. 물음표와 콜론을 사용하는 타 언어의 삼항 연산자와 비교하더라도 의외로 가독성이 높습니다.

+ Recent posts