Python 으로 if 를 활용한 분기문이나 for, while 을 활용한 반복문 프로그래밍에 들어가기에 앞서서, if, for, while 프로그래밍의 기초 지식이 되는 블리언 형식에 대해서 알아보겠습니다.
이번 포스팅은 어려운건 없구요, 그냥 편안하게 몸풀기 (머리 풀기?) 정도로 읽어보면 좋겠습니다.
(not 논리 연산자가 살짝 헷갈리기는 합니다만, 전반적으로 매우 쉬움)
블리언 형식(Boolean type)은 참(True), 거짓(False) 의 두 개 값을 가지는 자료형을 말합니다.
# (1) Boolean Type
In [1]: a = 2 > 1
In [2]: a Out[2]: True
In [3]: b = 2 < 1
In [4]: b Out[4]: False
In [5]: type(a) Out[5]: bool |
불리언 값이 (1) 조건문, (2) 논리 연산자, (3) 비교 연산자에서 어떤 경우에 참(True)이고, 어떤 경우에 거짓(False) 인지에 대해서 짚고 넘어가 보겠습니다.
[ 파이썬 참/거짓 불리언 형식 (Python Boolean Type ]
(1) 조건문에서의 참, 거짓 (True, False in Conditional statements) |
프로그래밍의 조건문에서 참, 거짓을 판단할 때 블리언 False, None, 숫자 0, 비어있는 리스트, 비어 있는 튜플, 비어있는 사전 자료형의 경우에 False 로 판단을 합니다.
반대로 블리언 True, not None, 0이 아닌 숫자, 값이 있는 리스트, 값이 있는 튜플, 값이 있는 사전 자료형의 경우 True 로 판단을 하구요.
자료형마다 값이 없이 비어있으면 거짓, 값을 가지고 있으면 참이라고 파이썬은 판단한다는게 재미있습니다. ^^
각 경우 마다 bool() 함수를 사용해서 파이썬이 참(True)과 거짓(False) 중에 어떻게 판단을 하는지 예를 들어서 살펴보겠습니다.
# (1-1) Boolean False, True
In [6]: bool(False) # False Out[6]: False
In [7]: bool(True) # True Out[7]: True |
# (1-2) None is False
In [8]: bool(None) # False Out[8]: False |
# (1-3) Number 0, 0.00 is False
In [9]: bool(0) # False Out[9]: False
In [10]: bool(0.00) # False Out[10]: False
In [11]: bool(5) # True Out[11]: True |
# (1-4) blank List [] is False
In [12]: bool([]) # False Out[12]: False
In [13]: bool(['a', 'b']) # True Out[13]: True |
# (1-5) blank Tuple () is False
In [14]: bool(()) # False Out[14]: False In [15]: bool(('a', 'b')) # True Out[15]: True |
# (1-6) blank Dictionary {} is False
In [16]: bool({}) # False Out[16]: False In [17]: bool({'a': 'b'}) # True Out[17]: True |
(2) 논리 연산자에서 참, 거짓 (True, False in Logical operators) : not, and, or |
파이썬의 논리 연산자(Logical operators)에는 피연산자를 부정하는 not, 두 피연산자 간의 논리곱을 수행하는 and, 두 연산자 간의 논리합을 수행하는 or 의 3가지가 있습니다.
(2-1) 피연산자를 부정하는 'not' 논리 연산자
위에서 소개한 조건문에서의 참, 거짓에 not 연산자를 붙이면 참이 거짓으로 바뀌고, 거짓은 참으로 바뀌게 됩니다.
# (2-1) 피연산자 부정 'not' logical operator
In [18]: not True # False Out[18]: False
In [19]: not False # True Out[19]: True |
숫자 '0'은 거짓(False)라고 했으므로 앞에 부정 연산자 not 이 붙으면 참(True)이 됩니다. 반면, '0'이 아닌 숫자는 참(True)이라고 했으므로 앞에 not 이 붙으면 거짓(False)으로 바뀝니다.
In [20]: not 0 # True Out[20]: True
In [21]: not 5 # False Out[21]: False |
None 은 거짓(False)라고 했으므로 not None은 참(True)로 평가합니다.
In [22]: not None # True Out[22]: True |
비어있는 문자열, 리스트, 튜플, 사전은 거짓(False)으로 평가한다고 했으므로, 피연산자를 부정하는 not 이 붙으면 참(True)으로 바뀌게 됩니다.
In [23]: not '' # denial of blank String -> True Out[23]: True
In [24]: not [] # denial of blank List -> True Out[24]: True
In [25]: not () # denial of blank Tuple -> True Out[25]: True
In [26]: not {} # denial of blank Dictionary -> True Out[26]: True |
반대로, 문자열, 리스트, 튜플, 사전에 값이 들어있는 경우 참(True)으로 평가한다고 했으므로, 피연산자를 부정하는 not이 붙으면 거짓(False)이 됩니다. 위와 아래의 비어있는 자료형에 not 붙인 경우와 값이 있는 자료형에 not 붙인 경우의 참, 거짓이 처음엔 좀 직관적으로 와닿지가 안던데요, 자꾸 보니깐 그러려니 하게 되네요. ^^'
In [27]: not 'ab' # False Out[27]: False
In [28]: not ['a', 'b'] # False Out[28]: False
In [29]: not ('a', 'b') # False Out[29]: False
In [30]: not {'a' : 'b'} # False Out[30]: False |
(2-2) 두 피연산자 간의 논리곱을 수행하는 and 논리 연산자
두 개의 피연산자가 모두 참(True and True)이면 True 이며, 두 피연산자 값 중에서 하나라도 거짓(False)이 있으면 거짓(False) 으로 판단합니다.
# (2-2) 논리곱 'and' logical operator
In [31]: True and True # True Out[31]: True
In [32]: True and False # False Out[32]: False
In [33]: False and True # False Out[33]: False In [34]: False and False # False Out[34]: False
|
(2-3) 두 피연산자 간의 논리합을 수행하는 or 논리 연산자
두 피연산자 중에서 한 개(True or False, False or True)나 혹은 두개 모두(True or True) 이라도 참(True)이면 참으로 평가합니다.
# (2-3) 논리합 'or' logical operator
In [35]: True or True # True Out[35]: True
In [36]: True or False # True Out[36]: True
In [37]: False or False # False Out[37]: False |
(3) 비교 연산자에서의 참, 거짓 (True, False in Comparison operators) : ==, !=, >, >=, <, <= |
(3-1) == 비교 연산자
두 피연산자의 값이 같으면 참(True), 서로 다르면 거짓(False)으로 평가
# (3) Comparison(Relational) operators
In [39]: a = 1; b = 2; c = 2 # input data
# (3-1) == : If the values of two operands are equal, then the condition becomes true
In [40]: a == b # False Out[40]: False
In [41]: b == c # True Out[41]: True |
(3-2) != 비교 연산자
두 피연산자의 값이 같지 않으면 참(True), 같으면 거짓(False)으로 평가 (음... 좀 헷갈리지요. ^^;)
In [39]: a = 1; b = 2; c = 2 # input data
# (3-2) != : If values of two operands are not equal, then condition becomes true
In [42]: a != b # True Out[42]: True
In [43]: b != c # False Out[43]: False |
(3-3) > 비교 연산자
: 왼쪽의 피연산자 값이 오른쪽의 피연산자 값보다 크면 참(True), 아니면 거짓(False)
In [39]: a = 1; b = 2; c = 2 # input data
# (3-3) > : If the value of left operand is greater than the value of right operand, # then condition becomes true
In [44]: a > b # False Out[44]: False
In [45]: b > a # True Out[45]: True
In [46]: b > c # False Out[46]: False |
(3-4) >= 비교 연산자
왼쪽의 피연산자 값이 오른쪽의 피연산자 값보다 크거나 같으면 참(True), 아니면 거짓(False)
In [39]: a = 1; b = 2; c = 2 # input data
# (3-4) >= : If the value of left operand is greater than or equal to the value of right operand, # then condition becomes true
In [47]: a >= b # False Out[47]: False
In [48]: b >= a # True Out[48]: True
In [49]: b >= c # True Out[49]: True |
(3-5) < 비교 연산자
왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작으면 참(True), 아니면 거짓(False)
In [39]: a = 1; b = 2; c = 2 # input data
# (3-5) < : If the value of left operand is less than the value of right operand, # then condition becomes true
In [50]: a < b # True Out[50]: True
In [51]: b < a # False Out[51]: False
In [52]: b < c # False Out[52]: False |
(3-6) <= 비교 연산자
왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같으면 참(True), 아니면 거짓(False)
In [39]: a = 1; b = 2; c = 2 # input data # (3-6) <= : If the value of left operand is less than or equal to the value of right operand, # then condition becomes true
In [53]: a <= b # True Out[53]: True
In [54]: b <= a # False Out[54]: False
In [55]: b <= c # True Out[55]: True |
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^
다음번 포스팅에서는 if ~ else 분기문(Branch statement)에 대해서 알아보겠습니다.