1. if 조건문 Last updated: 2023-10-17 10:29:24
조건문은 특정 조건에 해당하는 경우 원하는 명령을 실행시키기 위해 사용하는 가장 많이 사용되며 대표적인 흐름 제어문이다. 조건문을 이용해 상황에 따라 프로그램을 다르게 실행하도록 제어할 수 있다.
조건문은 특정 조건에 해당하는 경우 원하는 명령을 실행시키기 위해 사용하는 가장 많이 사용되며 대표적인 흐름 제어문이다. 조건문을 이용해 상황에 따라 프로그램을 다르게 실행하도록 제어할 수 있다.
if 조건문은 다음과 같은 형식을 갖는다. if 키워드 뒤에 True 혹은 False의 결과를 얻어낼 수 있는 조건을 입력하고 조건문 뒤에 콜론(’:’)을 입력해 조건문을 종료한다. 그리고 그 아래 줄에 if 조건문이 True인 경우 실행할 내용을 작성하는데, 중요한 것은 if 줄보다 들여쓰기(보통 공백 4개)를 해야 if 조건문에 포함된 내용인 것을 알 수 있다.
형식 | if condition: |
---|---|
파라미터 | • 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!")가 실행된다.
if ~ else 조건문이 실행되면 if 조건문의 조건을 먼저 검사하고, True 인 경우 if 조건문의 코드[1]을 실행하고 else 문의 코드[2]는 실행하지 않는다. 만일 if 문의 조건이 False인 경우 if 조건문[1]은 실행하지 않고 else 문의 코드[2]를 실행한다. if 문과 비슷하지만 if 문이 True가 아닌 경우 실행해야 하는 코드가 있을 경우에 사용한다.
형식 | if condition: |
---|---|
파라미터 | • 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를 사용한다.
만일 조건이 여러가지인 경우는 어떨까? a라는 값이 10보다 작을 때, 20보다 작을 때, 30보다 작을 때 등 여러 조건일 경우에는 if 문 뒤에 elif 문을 이어서 작성하면 된다. 모든 조건에 해당하지 않을 경우 옵션으로 else 문을 마지막에 추가할 수 있다.
여기서 주의할 것은 다음과 같다.
맨 앞에는 if 문을 작성한다. (필수)
중간에는 elif 문을 작성한다. 여러 개를 작성할 수 있다. (옵션)
마지막에는 else 문을 작성한다. (옵션)
작성한 if ~ elif ~ else 문은 맨 앞의 조건부터 검사하고, 하나라도 조건에 만족 된다면 이후의 조건은 검사하지 않는다.
형식 | if condition1: |
---|---|
파라미터 | • condition1 : True 혹은 False의 결과를 반환하는 조건문으로 condition1 값이 True라면 [1]에 해당하는 코드가 실행된다. |
아래 예제를 살펴보자.
[예제 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에 해당할 경우 이후의 조건은 검사하지 않고 중단한다. 따라서 조건을 여러 개 사용하고자 할 때에는 꼭 앞에서부터 조건을 엄격하게 검토하여 혹시 예상 밖의 조건에 해당하지 않는지 꼼꼼히 따져보아야 실수를 줄일 수 있다.
if 조건문은 조건을 검사하여 결과가 True라면 if 조건문 안의 코드를 실행하기 위해 사용한다. if 조건문의 조건 부분에는 여러가지 조건 연산자가 사용될 수 있다. 다음은 if 조건문에서 많이 사용되는 조건 연산자의 예시이다.
다음은 파이썬에서 가장 많이 사용되는 조건 연산자들이다. 매우 자주 사용되는 기본 문법들이니 모두 빠짐 없이 사용법을 숙지하기 바란다.
[표 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
if 문을 사용할 때 실행할 코드가 간단하다면 조건절과 실행절을 한 줄에 작성할 수 있다.
형식 | if condition: execution |
---|---|
파라미터 | • condition : True 혹은 False의 결과를 반환하는 조건문 |
[예제 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
if ~ else 문도 간단한 경우 한 줄에 작성할 수 있다. 형식은 다음과 같다. if 조건에 해당하는 경우 실행할 실행문을 if 앞에 작성하고, else에 해당하는 실행문을 else 뒤에 작성한다.
형식 | execution1 if condition else execution2 |
---|---|
파라미터 | • condition : True 혹은 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 문이 실행된다.
True 혹은 False를 판단할 수 있는 조건이 아닌 리스트 객체를 직접 조건에 입력하면 어떻게 동작할까? 만일 리스트에 내용이 있다면 if 문을 실행하고, 비어 있다면 실행하지 않는 조건문을 실행하려면 어떻게 할까?
형식 | if collect_var: |
---|---|
파라미터 | • collect_var : 리스트 집합 객체 |
리스트에 항목이 없이 비어 있는 경우 파이썬은 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 조건문이 실행된다.
리스트와 같은 집합형 객체가 비어 있는지 검사하는 방법에 대해 알아보자.
형식 | if len(collect_var): |
---|---|
파라미터 | • collect_var : 리스트 집합 객체 |
위와 같이 리스트 변수를 직접 조건문에 사용할 수 있지만 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 문이 실행된다.
in 명령을 사용하면 특정 항목이 리스트 변수 목록에 포함되어 있는지 검사할 수 있다.
형식 | if value in collect_var: |
---|---|
파라미터 | • collect_var : 리스트 집합 객체 |
다음은 ‘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 명령을 사용해 항목이 존재하는지 검사할 수 있다.