[03-1] Python - if (조건문)

Language/Python 2016. 8. 1. 11:25 posted by TechNote.kr


 코딩에 있어 가장 기본적인 문법 중 하나로 언어 마다 조금씩 사용법이 다르기 때문에 그 사용 방법에 대해 잘 이해하고 있어야 한다. 



  1. if 구문 기본 사용법
    1. 한 줄 (One line) 조건문의 특별한 사용
  2. 조건 type에 따른 if 구문의 사용
    1. if 구문에서 boolean 조건
    2. if 구문에서 숫자 조건
    3. if 구문에서 문자열 조건
    4. is 와 == 차이
  3. if 구문 관련 error



1. if 구문 기본 사용법


if 조건문1:
    실행문1-1
    실행문1-2
    ....
elif 조건문2:
    실행문2-1
    실행문2-2
    ....
else:
    실행문 3-1
    실행문 3-2
    ...


주의해야할 점 


if, elif, else 구문 제일 마지막에는 : (콜론)을 붙여주어야 한다.


실행문 작성시에는 들여쓰기(indent)를 꼭 해야한다.



 일상 생활에서의 예와 code로서 if 문을 비교해 보면 다음과 같다.



 사과가 3개 있다면 배를 3개 더 산다.


>>> apple = 3
>>> if apple == 3:
...     pear = 3
...     print("Buy pear 3 more.")
... 
Buy pear 3 more.



 길이 막힌다면 지하철을 탄다.


>>> currentRoad = "Heavy Traffic"
>>> if currentRoad == "Heavy Traffic":
...     print("Take a subway.")
... 
Take a subway.




1-1. 한 줄 (One line) 조건문의 특별한 사용


 조건에 따라 처리해야 할 구문이 많다면 위에 언급한 기본 조건문의 구조를 사용하면된다. 하지만 단순히 조건에 따른 할당과 같이 조건에 따라 처리해야 할 구문이 한 줄이라면 다음과 같은 구문의 조건문을 사용해 보는 것도 고려해 볼만하다.


Variable = value1 if 조건문 else value2


조건문이 True 일 경우 value1 이 Variable에 할당되고, 아니라면 value2 가 Variable에 할당된다. 


[일반 조건문 사용하여 변수값 할당시]

>>> cond = "Sample"
>>> if cond == "Sample":
...     simple = True
... else:
...     simple = False
...
>>> print(simple)
True

[한 줄 조건문 사용하여 변수값 할당시]

>>> cond = "Sample"
>>> simple = True if cond == "Sample" else False
>>> print(simple)
True



2. 조건 type에 따른 if 구문의 사용



python 변수에는 type이 있고, 해당 type 별로 if 구문을 사용하는 방법에 대해 알아보고자 한다.


  • if 구문에서 boolean 조건
  • if 구문에서 숫자 조건
  • if 구문에서 문자열 조건



2-1. if 구문에서 boolean 조건


 사실 boolean을 비교할 필요는 없다. boolean 자체가 true, false이기 때문에 비교 없이 if 구문에서 바로 사용 될 수 있기 때문이다. 그러함에도 가독성이나 명시적으로 표현하기 위해 사용하는 경우가 있을 수 있음으로 그 사용법을 살펴보면 다음과 같다.


boolean 비교 구문 예 : 


     if variable == True:

     if variable != True:

     if variable is True:

     if variable is not True:

     if variable:

     if not variable:


>>> a=True
>>> if a == True:
...     print "a is True"
... 
a is True
>>> 

>>> if a is True:
...     print "a is True"
... 
a is True
>>> 

>>> if a:
...     print "a is True"
... 
a is True
>>> 
>>> a=False
>>> if a != True:
...     print "a is False"
...
a is False
>>>

>>> if a is not True:
...     print "a is False"
...
a is False
>>>

>>> if not a:
...     print "a is False"
...
a is False
>>>



2-2. if 구문에서 숫자 조건


 숫자의 비교는 if 문에서 가장 많이 사용하는 조건이 아닐까 한다.


숫자 비교 구문 예


     if variable < 10:

     if variable > 10:

     if variable == 10:

     if variable <= 10:

     if variable >= 10:

     if variable != 10:


[Python - 변수 할당의 개념] 에서도 언급하긴 하였지만 object의 주소 역할을 하는 id를 비교할 때는 "is"를 사용하고, 값을 비교할 때는 "=="를 사용해야 한다. 좀 더 자세한 이해가 필요하다면 [Python - 변수 할당의 개념] 를 읽어보자.




2-3. if 구문에서 문자열 조건


 문자열(String)의 비교는 언어에 따라 사뭇 다르곤 한다. 따라서 python에서 사용되는 문자열의 비교 방법에 대해 잘 알고 다른 언어와 어떤 차이점이 있는지 알고 있어야 사용이 가능하다.


문자열 비교 구문 예 : 


     if variable  == "String":

     if variable  != "String":

     if variable  is "String":

     if variable  is not "String":

     if variable :

     if not variable :

     if variable == "":

     if "String" in variable:

     if "String" not in variable:



아래의 실제 실행 결과를 보면 알겠지만 boolean 비교와 크게 다르지 않다. 다만 단순 boolean 비교와 다른 것으로 인지하고 있어야 할 점이 있는데, 실제 문자열 값으로 어떤 것이라도 가지고 있다면 True로 인식되고, "" 로 아무것도 가지고 있지 않다면 False로 인식된다는 점이다.

>>> a="String"
>>> if a == "String":
...     print "OK"
...
OK
>>>

>>> if a != "String":
...     print "OK"
...
>>>

>>> if a is "String":
...     print "OK"
...
OK
>>>

>>> if a is not "String":
...     print "OK"
...
>>>

>>> if a:
...     print "OK"
...
OK
>>>

>>> if not a:
...     print "OK"
...
>>>
>>> a=""
>>> if a == "":
...     print "OK"
...
OK
>>>

>>> if a:
...     print "OK"
...
>>>

>>> if not a:
...     print "OK"
...
OK
>>>
>>> a = "abcdefghijklmn"
>>> if "bcd" in a:
...     print "OK"
...
OK
>>> if "xyz" in a:
...     print "OK"
... else:
...     print "NOK"
...
NOK
>>>



2-4. is 와 == 의 차이


 앞서 언급한 조건문을 보면 is 로 그 동일함을 확인하는 경우가 있고, == 로 동일함을 확인하는 경우가 있었다. 그 차이는 다음과 같다.


is : 해당 object 의 값 뿐만 아니라 identity (memory address) 까지 같은지 확인

== : 해당 object 의 값이 같은지만 확인


>>> a = "String"
>>> b = "String"
>>> if a == b:
...     print("OK")
...
OK
>>> if a is b:
...     print("OK")
...
OK
>>> id(a)
140040905899872
>>> id(b)
140040905899872
>>> if a == b:
...     print("OK")
...
OK
>>> if a is b:
...     print("OK")
...
>>> id(a)
140040905899872
>>> id(b)
140040905899968


위와 같이 변수 a와 b에 같은 값을 넣었다고 하더라도 해당 변수가 저장된 memory address (identity) 가 같을 수도 있고, 다를 수도 있다. 따라서 단순히 값만 비교하는 경우라면 "==" 를 사용해서 비교해야 한다. 




3. if 구문 관련 Error



SyntaxError: invalid syntax


발생 case 1> 비교 연산자가 아닌 할당을 하였을 경우

>>> if a = "test"
  File "", line 1
    if a = "test"
         ^
SyntaxError: invalid syntax
>>> 

발생 case 2> if / elif / else 구문 라인 끝에 : (콜론)을 누락하였을 경우

>>> if a == "test"
  File "", line 1
    if a == "test"
                 ^
SyntaxError: invalid syntax
>>>