9. 조건문(if)
페이지정보
내용
조건문 - if
조건문이란 어떠한 조건을 검사하여, 참일 경우와 거짓일 경우에 따라 수행할 문장을 결정하는 구문이다.
조건문의 조건에는 참과 거짓을 판별할 수 있도록 작성하여야 하며, 이와 관련하여 비교 연산자와 논리 연산자등 참과 거짓을 판별할 수 있는 연산자가 사용된다.
if 조건문의 기본 구조
다음은 if와 else를 이용한 조건문의 기본 구조이다.
|
if 조건문: 문장1 문장2 else: 문장3 문장4 |
조건문을 검사해서 참이면 if문 바로 다음의 문장(if 블록 - 문장1, 문장2)들을 수행하고, 조건문이 거짓이면 else문 다음의 문장(else 블록 - 문장3, 문장4)들을 수행하게 된다. else문은 생략가능하며, if문 없이 독립적으로 사용할 수 없다.
들여쓰기 주의
문장1, 문장2는 if 조건문의 수행구문이다. 따라서 if 조건문: 다음에 들여쓰기를 해주어야 하고, 이를 어기면 오류가 발생한다.
모든 문장은 상위 구문에 종속될때 들여쓰기를 해주어야 한다.
아래와 같이 들여쓰기를 해주어야 한다.
|
if 조건문: 문장1 문장2 문장3 |
다음과 같이 작성하면 오류가 발생한다. "문장2"를 들여쓰기 칸을 일치하지 않았기 때문이다.
|
if 조건문: 문장1 문장2 문장3 |
조건문 기본 예제 만들어보기
다음의 문장을 조건문으로 코딩해본다.
|
"돈이 있으면 콜라를 산다. 콜라를 살 돈이 모자라면 우유를 산다." |
소스
|
money = 500
|
| 우유를 산다 |
조건문 다음에 콜론(:)이 들어가야 한다.
소스 분석
|
money = 500 cola_price = 600 milk_price = 300 |
변수이다. 프로그램에 필요한 돈, 콜라 가격, 우유 가격을 설정하였다. |
|
if money > 0: 문장1 else: 문장2 |
if 조건문이다.
money > 0 이 조건이 된다. 이 조건은 "money가 0보다 크다"이며, 변수에 저장된 money는 500이므로 0보다 크다는 명제(조건)가 참이 된다. 따라서 이 조건문에서는 문장1이 실행된다.
만약 money가 없거나(0) 0보다 작다면 money > 0 은 거짓이 되므로, 문장2가 실행된다. |
|
문장1
if money >= cola_price: print("콜라를 산다.") else: print("우유를 산다.") |
문장1에 해당하는 구문이다. 코드에서 보면 알수 있지만, if 조건문의 내부 문장도 if 조건문이 될 수 있다. if 조건문은 하위, 하위로 무한으로 생성이 가능하다.
변수에서 보면 money = 500이고, cola_price = 600이다. 따라서 "money가 cola_price보다 크거나 같다"는 조건은 거짓이 된다. 그러므로 이 코드에서는 if 블록이 실행되지 않고 else 블록이 실행된다. 즉, print("우유를 산다.")가 실행이 되므로 코드의 결과는 "우유를 산다" 가 된다. |
|
문장2
print("콜라도 우유도 살수 없다") |
만약 변수의 money가 0보다 작거나 같으면, 문장2가 실행된다. 코드의 money 변수 값을 변경해가면서 결과를 테스트 해 본다. |
조건문 예제 코드에서 money > 0, money >= cola_price 라는 조건이 있었다. 조건이라는 것은 그 결과가 참이냐, 거짓이냐로 구분할 수 있어야 한다. 이를 위해서 조건문에서는 비교연산자(<, >, ==, !=, >=, <=)가 사용된다.
비교연산자는 아래의 표와 같이 해석한다.
비교 연산자 (Comparison Operators):
a = 10, b = 20 이라 가정한다.
|
연산자 |
설명 |
예제 |
|
== |
값이 동일하다 |
(a == b) → False |
|
!= |
값이 동일하지 않다 |
(a != b) → True |
|
> |
왼쪽 값이 오른쪽 값보다 크다 |
(a > b) → False |
|
< |
왼쪽 값이 오른쪽 값보다 작다 |
(a < b) → True |
|
>= |
왼쪽 값이 오른쪽 값보다 크거나 동일하다 |
(a >= b) → False |
|
<= |
왼쪽 값이 오른쪽 값보다 작거나 동일하다 |
(a <= b) → True |
위의 연산자의 해석에 따라
money > 0 ----> True
money >= cola_price ----> False
가 된 것이다.
여러 조건 동시에 사용하기
조건문에는 하나의 조건이 아니라 여러 개의 조건이 동시에 들어갈 수 있다.
위의 예제코드를 아래처럼 변경해 본다.
소스
|
money = 500
|
| 우유를 산다 |
조건문 다음에 콜론(:)이 들어가야 한다.
소스 분석
|
money = 500 cola_price = 600 milk_price = 300 |
변수이다. 프로그램에 필요한 돈, 콜라 가격, 우유 가격을 설정하였다. |
|
if money > 0 and money >= cola_price: 문장1 else: 문장2 |
if 조건문이다.
money > 0 and money >= cola_price가 조건이 된다. 이 조건은 "money가 0보다 크다 그리고 money가 cola_price 보다 크거나 같다"이며, 변수에 저장된 money는 500이므로 0보다 크다는 조건에 참이 된다. 하지만 money는 cola_price보다 작다. 그러므로 "money는 cola_price보다 크거나 같다"는 거짓이 된다. 이 조건문에는 두개의 조건이 "and"로 연결되어 있다. and는 앞 뒤에 오는 조건 모두가 참이어야만 전체 조건이 참이 된다. 따라서 이 조건문은 두 조건중에서 하나는 참이고 하나는 거짓이므로 전체 조건은 거짓이 된다. 따라서 문장2가 실행된다. |
|
문장1
print("콜라를 산다.") |
문장1에 해당하는 구문이다. 가지고 있는 돈이 0보다 크며, 콜라 가격보다 많다면 이 문장이 실행 될 것이다. |
|
문장2
if money >= milk_price: |
문장2 구문이다. 문장2는 자체적으로 또 다른 조건문이다. money가 우유 가격보다 많다면 우유를 살 것이고, 우유가격보다 적다면, 우유를 사지 못한다.
코드의 money 변수 값을 변경해가면서 결과를 테스트 해 본다. |
두 번째 예제 코드에서 money > 0 and money >= cola_price 라는 조건이 있었다. 두 개의 조건문을 "and"로 연결했다. and는 앞 뒤의 조건을 모두 살펴보아 모두 참일 경우에 전체의 조건을 참으로 판단하는 논리 연산자(and, or, not)이다.
논리연산자는 아래의 표와 같이 해석한다.
논리 연산자 (Logical Operators):
a = True, b = False 이라 가정한다.
|
연산자 |
설명 |
예제 |
|
and |
논리 AND 연산. 둘다 참일때만 참 |
(a and b) = False |
|
or |
논리 OR 연산. 둘 중 하나만 참이여도 참 |
(a or b) = True |
|
not |
논리 NOT 연산. 논리 상태를 반전 |
not(a and b) = True |
파이썬에서 사용하는 다른 형태의 조건문 - 멤버 연산자
|
in |
not in |
|
x in 리스트 |
x not in 리스트 |
|
x in 튜플 |
x not in 튜플 |
|
x in 문자열 |
x not in 문자열 |
※ 뿐만 아니라 조건문에는 참과 거짓을 판별하는 연산자라면 무엇이든지 사용할 수 있다.
관련 연산자는 연산자 종류에서 확인한다.
다양한 조건을 판단하는 elif
조건이 복잡해질 때는 if와 else만으로는 다양한 조건을 판단하기 어렵다. 다음의 예를 보자.
| 주머니를 확인한다. 돈이 있으면 콜라를 산다. 돈이 없더라도 카드가 있으면 콜라를 산다. 돈도 카드도 없으면 물을 마신다. |
이를 코드로 작성해보자.
소스
|
pocket= ['ID', 'cellphone', 'pen']
if 'money' in pocket: |
| 카드로 콜라를 산다. |
조건문 다음에 콜론(:)이 들어가야 한다.
소스 분석
| pocket= ['ID', 'cellphone', 'pen'] card = True |
변수이다. pocket은 리스트이며, 'ID', 'cellphone', 'pen'이 들어있다. card는 True이며 이는 카드를 가지고 있다고 해석한다. |
|
if 'money' in pocket: 문장1 elif card: 문장2 else: 문장3
|
if 조건문이다.
'money' in pocket이 조건이 된다. pocket이라는 리스트에는 'money'가 없다. 따라서 이 조건은 거짓이 된다.
다음 조건을 본다. elif는 else 와 if 가 합쳐졌다고 보면 된다. 다음 조건은 card 이다. card = True이다. 따라서 이 조건은 참이다. 문장2가 실행된다.
만약 money가 pocket에 없고, card도 False라면 문장3이 실행 될 것이다. 코드의 변수 값을 변경해가면서 결과를 테스트 해 본다. |
이와 같이 조건이 다양해질때, if, elif, else를 사용하여 조건을 충족 시킬 수 있다. elif는 제한없이 사용할 수 있다.
|
if 조건문: 문장1 문장2 ... elif 조건문: 문장1 문장2 ... elif 조건문: 문장1 문장2 ... else: 문장1 문장2 |
