2) 제어문 (2)

and, or, not

 

  또다른 조건 판단에 쓰이는 것으로 and, or, not이란 것이 있다.

각각의 연산자는 다음처럼 동작을 한다.

 

연산자 설명
x or y x와 y 둘중에 하나만 참이면 참이다
x and y x와 y 모두 참이어야 참이다
not x x가 거짓이면 참이다

 

 

  다음의 예를 통해 위의 사항을 반영해 보도록 하자.

 

    "돈이 3000원 이상 있거나 카드가 있다면 택시를 타고 그렇지 않으면 걸어가라"

 

>>> money = 2000
>>> card = 1
>>> if money >= 3000 or card:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")
...
택시를 타고 가라
>>>

 

  money는 2000이지만 card가 1이기 때문에 money >= 3000 or card라는 조건문이 참이 되기 때문에 if문 다음의 문장이 수행된다.

 

x in s, x not in s

 

  더 나아가서 파이썬에서는 조금 더 재미있는 조건문들을 제공한다. 바로 다음과 같은 것들이다.

 

in not in
x in 리스트 x not in 리스트
x in 튜플 x not in 튜플
x in 문자열 x not in 문자열

 

 

  'in' 이라는 영어단어가 '~안에'라는 뜻을 가졌음을 상기해 보면 다음의 예들이 쉽게 이해가 될 것이다.

 

>>> 1 in [1, 2, 3]
True
>>> 1 not in [1, 2, 3]
False

 

  위의 첫 번째 예는 “[1, 2, 3]이라는 리스트 안에 1이 있는가?” 라는 조건문이다.

1은 [1, 2, 3]안에 있으므로 참이 되어 True를 리턴한다.

  두 번째 예는 "[1, 2, 3]이라는 리스트 안에 1이 없는가?" 라는 조건문이다.

1은 [1, 2, 3]안에 있으므로 거짓이 되어 False를 리턴한다.

  다음은 튜플과 문자열의 적용예를 보여준다.

 

>>> 'a' in ('a', 'b', 'c')
True
>>> 'j' not in 'python'
True

 

위의 것들을 이용하여 우리가 계속 사용해온 택시예제에 적용시켜 보자.

 

    "만약 주머니에 돈이 있으면 택시를 타고, 없으면 걸어가라"

 

>>> pocket = ['paper', 'cellphone', 'money']
>>> if 'money' in pocket:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")
...
택시를 타고 가라
>>>

 

['paper', 'cellphone', 'money']라는 리스트에 안에 'money'가 있으므로 'money' in pocket은 참이 되어서 if문 다음의 문장이 수행되었다.

 

elif (다중 조건 판단)

 

  if와 else만을 가지고서는 다양한 조건 판단을 하기가 어렵다.

다음과 같은 예만 하더라도 if와 else만으로는 조건 판단에 어려움을 겪게 된다.

 

    "지갑에 돈이 있으면 택시를 타고, 지갑엔 돈이 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어가라"

 

위의 문장을 보면 조건을 판단하는 부분이 두 군데가 있다.

  먼저 지갑에 돈이 있는지를 판단해야 하고 지갑에 돈이 없으면 다시 카드가 있는지를 판단한다.

if와 else만으로 위의 문장을 표현 하려면 다음과 같이 할 수 있을 것이다.

 

>>> pocket = ['paper', 'handphone']
>>> card = 1
>>> if 'money' in pocket:
...     print("택시를 타고가라")
... else:
...     if card:
...         print("택시를 타고가라")
...     else:
...         print("걸어가라")
...
택시를 타고가라
>>>

 

  언뜻 보기에도 이해하기가 쉽지 않고 산만한 느낌이 든다.

위와 같은 점을 보완하기 위해서 파이썬에서는 다중 조건 판단을 가능하게 하는 elif라는 것을 사용한다.

  위의 예를 elif를 이용하면 다음과 같이 할 수 있다.

 

>>> pocket = ['paper', 'cellphone']
>>> card = 1
>>> if 'money' in pocket:
...      print("택시를 타고가라")
... elif card: 
...      print("택시를 타고가라")
... else:
...      print("걸어가라")
...
택시를 타고가라

 

  즉, elif는 이전 <조건문>이 거짓일 때 수행되게 된다. if, elif, else의 기본 구조는 다음과 같다.

 

If <조건문>:
    <수행할 문장1> 
    <수행할 문장2>
    ...
elif <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
elif <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
...
else:
   <수행할 문장1>
   <수행할 문장2>
   ...

 

  위에서 보듯이 elif는 개수에 제한 없이 사용할 수 있다. (참고: 이것은 마치 C언어의 switch문과 비슷한 것이다.)

 

pass의 사용

 

  가끔 조건문을 판단하고 참 거짓에 따라 행동을 정의 할 때 아무런 일도 하지 않게끔 설정을 하고 싶을 때가 생기게 된다.

다음의 예를 보자.

 

    "지갑에 돈이 있으면 가만히 있고 지갑에 돈이 없으면 카드를 꺼내라"

 

위의 예를 pass를 적용해서 구현해 보자.

 

>>> pocket = ['paper', 'money', 'cellphone']
>>> if 'money' in pocket:
...     pass 
... else:
...     print("카드를 꺼내라")
...

 

  pocket이라는 리스트 안에 'money'란 문자열이 있기 때문에 if문 다음문장인 pass가 수행되었고 아무런 결과값도 보여주지 않는 것을 확인 할 수 있다.

 

한줄 짜리 if문

 

  위의 예를 보면 if문 다음의 수행할 문장이 한줄이고 else문 다음에 수행할 문장도 한줄이다.

이렇게 수행할 문장이 한줄일때 조금 더 간편한 방법이 있다. 위에서 알아본 pass를 사용한 예는 다음처럼 간략화 할 수 있다.

 

>>> pocket = ['paper', 'money', 'cellphone']
>>> if 'money' in pocket: pass
... else: print("카드를 꺼내라")
...

 

  if문 다음의 수행할 문장을 ':'뒤에 바로 적어 주었다. else문 역시 마찬가지이다. 이렇게 하는 이유는 때때로 이렇게 하는 것이 보기에 편하게 때문이다.

 

예제를 연습해 봅시다