1. if 조건문 Last updated: 2023-10-17 10:29:24

조건문은 특정 조건에 해당하는 경우 원하는 명령을 실행시키기 위해 사용하는 가장 많이 사용되며 대표적인 흐름 제어문이다. 조건문을 이용해 상황에 따라 프로그램을 다르게 실행하도록 제어할 수 있다.

1.1 조건문의 형식

1.1.1 if 조건문

if 조건문은 다음과 같은 형식을 갖는다. if 키워드 뒤에 True 혹은 False의 결과를 얻어낼 수 있는 조건을 입력하고 조건문 뒤에 콜론(’:’)을 입력해 조건문을 종료한다. 그리고 그 아래 줄에 if 조건문이 True인 경우 실행할 내용을 작성하는데, 중요한 것은 if 줄보다 들여쓰기(보통 공백 4개)를 해야 if 조건문에 포함된 내용인 것을 알 수 있다.

형식

if condition:
    # do something

파라미터

• condition : 조건문으로 결과는 True 혹은 False가 되어야 한다.

if 문의 예제를 확인해보자.


[예제 4- 1] 간단한 if 조건문 사용하기

a = 10
b = 20
if a < b:
    print("a is bigger than b!")

[결과]

a is bigger than b!

위 예제에서 if 조건문인 a < b 는 True 이므로 if 문 내의 실행 코드 print("a is bigger than b!")가 실행된다.



1.1.2 if ~ else 조건문

if ~ else 조건문이 실행되면 if 조건문의 조건을 먼저 검사하고, True 인 경우 if 조건문의 코드[1]을 실행하고 else 문의 코드[2]는 실행하지 않는다. 만일 if 문의 조건이 False인 경우 if 조건문[1]은 실행하지 않고 else 문의 코드[2]를 실행한다. if 문과 비슷하지만 if 문이 True가 아닌 경우 실행해야 하는 코드가 있을 경우에 사용한다.

형식

if condition:
    # do something, if condition is True
else:
    # do something, if condition is False

파라미터

• condition : 조건문으로 결과는 True 혹은 False, 조건이 True에 해당하면 if문 안쪽의 내용이 실행되고, False라면 else문 안쪽의 내용이 실행된다.

if ~ else 문의 예제를 확인해보자.


[예제 4- 2] if와 else문 실행하기

a = 20
b = 10
if a < b:
    print("a is bigger than b!")
else:
    print("a is smaller than b!")

[결과]

a is smaller than b!

위 예제에서 if 문의 조건인 a < b가 False이므로 else 문이 실행되어 a is smaller than b! 문장이 출력 되었다. if ~ else 문은 조건에 따라 둘 중에 한 곳의 코드만 실행된다.


Hint! 조건이 많아지면 if ~ elif ~ else

단, 위 예제에서 주의해야 할 것이 있다. a와 b가 값이 다를 경우에는 if 혹은 else문 중에 한 곳이 실행 되는 것이 맞지만, 만약 a와 b의 값이 같다면 어떨까? if 문은 a is bigger than b이고 else는 a is smaller than b이니, 둘 다 정답이 아니다. if ~ else를 사용할 때는 조건에 대한 답이 두 가지 일 때 사용하면 좋다. 만일 2가지보다 많은 조건일 때는 어떨까? 그럴때는 if ~ elif ~ else를 사용한다.



1.1.3 if ~ elif ~ else 조건문

만일 조건이 여러가지인 경우는 어떨까? a라는 값이 10보다 작을 때, 20보다 작을 때, 30보다 작을 때 등 여러 조건일 경우에는 if 문 뒤에 elif 문을 이어서 작성하면 된다. 모든 조건에 해당하지 않을 경우 옵션으로 else 문을 마지막에 추가할 수 있다.

여기서 주의할 것은 다음과 같다.

  • 맨 앞에는 if 문을 작성한다. (필수)

  • 중간에는 elif 문을 작성한다. 여러 개를 작성할 수 있다. (옵션)

  • 마지막에는 else 문을 작성한다. (옵션)

  • 작성한 if ~ elif ~ else 문은 맨 앞의 조건부터 검사하고, 하나라도 조건에 만족 된다면 이후의 조건은 검사하지 않는다.

형식

if condition1:
    # [1] do something, if condition1 is True
elif condition2:
    # [2] do something, if condition2 is True
else:
    # [3] do something, if condition is False

파라미터

• condition1 : True 혹은 False의 결과를 반환하는 조건문으로 condition1 값이 True라면 [1]에 해당하는 코드가 실행된다.
• condition2 : True 혹은 False의 결과를 반환하는 조건문으로 이전의 if 혹은 elif의 조건이 모두 False라면 condition2의 조건을 검사하고 True라면 안쪽의 [2]에 해당하는 코드가 실행된다.

else문은 이전의 if 혹은 else의 조건이 모두 False라면 실행되며 조건이 없으므로 무조건 [3]에 해당하는 코드가 실행된다.

아래 예제를 살펴보자.


[예제 4- 3] if ~ elif ~ else 문 사용하기

a = 15

# 조건(1)
if a <= 10:
    print('a is under 10')
	
# 조건(2)
elif a <= 20:
    print('a is under 20')
	
# 조건(3)
elif a <= 30:
    print('a is under 30')
# 기타
else:
    print('a is over 30')

[결과]

a is under 20

위 예제에서 a 값은 15 이므로 조건(1)에 해당하지 않아 넘어가고, 조건(2)에 해당하므로 두 번째 elif 문을 실행 후 if 문을 종료한다.


위와 동일한 조건이지만 순서를 변경하면 어떨까? 다음의 예제를 살폅보자.


[예제 4- 4] if ~ else 조건의 순서 확인하기

a = 15

# 조건(1)
if a <= 30:
    print('a is under 30')
	
# 조건(2)
elif a <= 20:
    print('a is under 20')
	
# 조건(3)
elif a <= 10:
    print('a is under 10')
	
# 기타
else:
    print('a is over 30')

[결과]

a is under 30

위 예제에서 a는 15이므로 첫 번째 조건(1)에 해당한다. 따라서 첫 번째 조건의 내용을 실행하고 if 문을 종료한다. 동일한 조건이지만 순서를 변경하면 맨 위에서부터 조건이 실행되므로 결과가 달라졌다.


Hint! elif 문을 여러 개 사용할 때 조건 검사 순서

if 문에서 elif 문을 여러 개 사용할 때 조건이 중첩되는 경우가 발생할 수 있다. if 문은 맨 앞의 조건을 검사하고 True에 해당할 경우 이후의 조건은 검사하지 않고 중단한다. 따라서 조건을 여러 개 사용하고자 할 때에는 꼭 앞에서부터 조건을 엄격하게 검토하여 혹시 예상 밖의 조건에 해당하지 않는지 꼼꼼히 따져보아야 실수를 줄일 수 있다.



1.2 if 조건 연산자

if 조건문은 조건을 검사하여 결과가 True라면 if 조건문 안의 코드를 실행하기 위해 사용한다. if 조건문의 조건 부분에는 여러가지 조건 연산자가 사용될 수 있다. 다음은 if 조건문에서 많이 사용되는 조건 연산자의 예시이다.


1.2.1 파이썬의 조건 연산자

다음은 파이썬에서 가장 많이 사용되는 조건 연산자들이다. 매우 자주 사용되는 기본 문법들이니 모두 빠짐 없이 사용법을 숙지하기 바란다.

[표 5] 조건 연산자

연산자

예시

설명

==

a == b

a와 b의 값이 같으면 True, 같지 않으면 False

!=

a != b

a와 b의 값이 같지 않으면 True, 같으면 False

<

a < b

a가 b보다 작으면 True, 같거나 크면 False

>

a > b

a가 b보다 크면 True, 같거나 작으면 False

<=

a <= b

a가 b와 보다 작거나 같으면 True, 크면 False

>=

a >= b

a가 b보다 크거나 같으면 True, 작으면 False

is not

a is not b

!=와 같은 의미로 a와 b의 값이 같지 않으면 True, 같으면 False

not

not (조건)

현재 조건이 True이면 False로, False이면 True로 반대로 바꾼다.

~

~(조건)

not 연산과 동일하게 참과 거짓을 반대로 바꾼다.

and

조건1 and 조건2

조건1과 조건 2가 모두 참인 경우 전체 조건이 True, 아니면 False

or

조건1 or 조건2

조건1과 조건 2 중 하나라도 참이면 전체 조건이 True, 모두 거짓이면 False

조건 연산자 예제이다. 아래 모든 연산의 결과는 참이다.


[예제 4- 5] 다양한 if 조건문 사용하기

a = 1
b = 2

# == 연산자
if a == 1:
    print("True")

# != 연산자
if a != b:
    print("True")
    
# < 연산자
if a < b:
    print("True")
    
# > 연산자
if b > a:
    print("True")
    
# < 연산자
if a <= b:
    print("True")
    
# > 연산자
if b >= a:
    print("True")
    
# is not 연산자
if a is not b:
    print("True")
    
# and 연산자
if (a == 1) and (b == 2):
    print("True")
    
# or 연산자
if (a == 1) or False:
    print("True")
    
# not 연산자
if ~(a == b):
    print("True")
    
# not 연산자
if not (a == b):
    print("True")

[결과]

True

1.2.2 약식 if문

if 문을 사용할 때 실행할 코드가 간단하다면 조건절과 실행절을 한 줄에 작성할 수 있다.

형식

if condition: execution

파라미터

• condition : True 혹은 False의 결과를 반환하는 조건문
• execution : condition이 True인 경우 실행할 코드

[예제 4- 6] 기본적인 if 조건문 사용하기

a = 20
b = 10

if a > b:
	print("a is bigger than b")

[결과]

a is bigger than b

위의 예제는 다음과 같이 한 줄에 작성할 수 있다.


[예제 4- 7] 한 줄 if 조건문 사용하기

a = 20
b = 10

if a > b: print("a is bigger than b")

[결과]

a is bigger than b

만약 실행해야 할 코드가 여러 줄이라면 아래와 같이 쉼표(,)로 구분하여 작성한다.


[예제 4- 8] 한 줄 if 조건문에 코드 여러 줄 실행하기

a = 20
b = 10

if a > b: print("a is bigger than b"), print("a is bigger than b")

[결과]

a is bigger than b
a is bigger than b


1.2.3 약식 if ~ else문

if ~ else 문도 간단한 경우 한 줄에 작성할 수 있다. 형식은 다음과 같다. if 조건에 해당하는 경우 실행할 실행문을 if 앞에 작성하고, else에 해당하는 실행문을 else 뒤에 작성한다.

형식

execution1 if condition else execution2

파라미터

• condition : True 혹은 False의 결과를 반환하는 조건문
• execution1 : 조건문이 True인 경우 실행될 코드
• execution2 : 조건문이 False인 경우 실행될 코드

다음은 숫자가 홀수인지 짝수인지 출력하는 예제이다.


[예제 4- 9] 한줄 if에서 else문 실행하기

a = 10
print("a is odd") if (a % 2) == 1 else print("a is even")

[결과]

a is even

위 예제에서 a는 10으로 짝수이므로 나머지 연산(%) 결과 if에 해당하지 않으므로 else 문이 실행된다.



1.3 리스트 항목을 이용한 조건 검사

True 혹은 False를 판단할 수 있는 조건이 아닌 리스트 객체를 직접 조건에 입력하면 어떻게 동작할까? 만일 리스트에 내용이 있다면 if 문을 실행하고, 비어 있다면 실행하지 않는 조건문을 실행하려면 어떻게 할까?

1.3.1 리스트가 비어 있는지 검사

형식

if collect_var:
    # do something

파라미터

• collect_var : 리스트 집합 객체

만일 collect_var 변수에 항목이 존재한다면 조건이 True가 되어 if 문 내의 코드가 실행된다.

리스트에 항목이 없이 비어 있는 경우 파이썬은 False로 인식하여 if 조건문을 실행한다.


[예제 4- 10] 항목이 존재하지 않는 리스트에 대한 if 조건식 사용하기

fruit = []

if fruit:
    print("fruit is exist.")
else:
    print("fruit is empty.")

[결과]

fruit is empty.

위 예제에서 리스트 변수 fruit은 비어 있기 때문에 if 조건문에서 False로 인식하여 else 문이 실행되었다.


다음 예제는 위와 동일하지만 리스트 변수 fruit에 항목이 존재한다.


[예제 4- 11] 항목이 존재하는 리스트에 대한 if 조건식 사용하기

fruit = ['apple']

if fruit:
    print("fruit is exist.")
else:
    print("fruit is empty.")

[결과]

fruit is exist.

위 예제에서 리스트 변수에 값이 포함되어 있으므로 True로 인식되어 if 조건문이 실행된다.



1.3.2 len( ) 함수를 이용해 리스트가 비어있는지 검사

리스트와 같은 집합형 객체가 비어 있는지 검사하는 방법에 대해 알아보자.

형식

if len(collect_var):
    # do something

파라미터

• collect_var : 리스트 집합 객체

만일 collect_var 변수에 항목이 존재한다면 len( ) 함수의 결과가 0보다 큰 값이 반환된다.

위와 같이 리스트 변수를 직접 조건문에 사용할 수 있지만 True 혹은 False가 아니므로 조금 헤깔릴 수 있다. 이런 경우 다음과 같이 len( ) 메서드를 이용해 명확하게 조건문을 작성할 수도 있다.


[예제 4- 12] 리스트 항목 개수에 의한 if 조건식

fruit = []

if len(fruit) == 0:
    print("fruit is empty.")
else:
    print("fruit is exist.")

[결과]

fruit is empty.

그렇다면 비어 있는 리스트 변수를 None인지 검사하면 어떻게 될까?


[예제 4- 13] 리스트의 None 조건 검사하기

fruit = []

if fruit is None:
    print("fruit is empty.")
else:
    print("fruit is exist.")

[결과]

fruit is exist.

위 예제에서 리스트 변수 fruit은 비어 있기는 하지만 None은 아니다. 엄연히 변수가 존재하기 때문에 else 문이 실행된다.



1.3.3 in 명령으로 리스트에 포함되는지 검사

in 명령을 사용하면 특정 항목이 리스트 변수 목록에 포함되어 있는지 검사할 수 있다.

형식

if value in collect_var:
    # do something

파라미터

• collect_var : 리스트 집합 객체
• value : 리스트에 포함되어 있는지 검사할 값

value가 collect_var에 포함되어 있다면 in 명령의 결과는 True, 그렇지 않다면 False값을 반환한다.

다음은 ‘orange’와 ‘melon’이 문자열이 리스트 변수 fruits에 포함되어 있는지 검사하는 if 조건문 예제이다.


[예제 4- 14] in 명령으로 목록에 항목이 있는지 검사하기

fruits = ['apple', 'banana', 'orange', 'mango', 'grape']
fruit1 = 'orange'
fruit2 = 'melon'

if fruit1 in fruits:
    print(f"{fruit1} is in the list.")
else:
    print(f"{fruit1} is not in the list.")
    
if fruit2 in fruits:
    print(f"{fruit2} is in the list.")
else:
    print(f"{fruit2} is not in the list.")

[결과]

orange is in the list.
melon is not in the list.

세트, 튜플도 리스트와 동일하게 in 명령을 사용해 항목이 존재하는지 검사할 수 있다.