일상코딩/노트

Python 데이터 타입(Boolean, None)

코딩애벌레 2024. 1. 19. 21:06

데이터 타입의 마지막 시간이다. 여기까지 왔다면, 파이썬의 기본은 알게 된 것이다. 물론~ 진짜 시작은 지금부터겠지만, 여기까지 온 것으로도 대단한 것이라고 생각한다.

 

Boolean (불린형)

: 사실 첫인상은 별로였다. 글자도 발음도 애매하게 생긴것이 불린형이라는 한글발음 자체가 반갑진 않다. 

  • 논리 데이터로 '참(True)'과 '거짓(False)'을 표현하는 데이터이다.
  • 출력 값은 True 와 False를 갖는다.
  • 주로 데이터를 비교하거나 논리 연산을 할 때 사용된다.

숫자 데이터의 연산자처럼 boolean도 비교 연산자가 있는데, 수학에서 흔히 보던 '같다'를 의미하는 등호, '비교'하는 부등호와 동일한 개념을 갖는다.

주로 조건문에 사용하여 해당하는 조건의 값을 비교할 때 자주 쓰이며, 특히 while문, if문에 많이 사용되곤 한다.

return 값은 True / False 를 반환한다.

 

비교 연산자
비교연산자 설명
a > b a는 b보다 크다
a < b a는 b보다 작다
a >= b a는 b보다 크거나 같다 (or)
a <= b a는 b보다 작거나 같다
a == b a와 b는 같다 (할당을 의미하는 ' = ' 와 헷갈리지 말자)
a != b a와 b는 다르다 (== 의 반대)
a is b a는 b다 (메모리 공간까지 동일한가?)
a is not b a는 b가 아니다

 

is에 관련된 것은 뒤에 나오니 그때 자세히 정리하도록 하겠다. 다음은 활용 예시이다.

# 비교 연산자를 통한 결과는 True / False를 리턴한다
print(3 > 6)		# False 3은 6보다 작기 때문에 False

print(10 <= 10)		# True 10은 10보다 작거나 같기 때문에 True

print(1 == '1')		# False 숫자데이터 1과 문자데이터 1은 같지 않다 False

print(11.0 == 11)	# True float의 11.0과 integer의 11은 같기 때문에 Ture

print(12.0 != 12)	# False 12와 12는 같기때문에 False

print(11.0 is 11)	# False 위에선 같다면서요! 라고해도 float와 integer까지 비교하여 Flase

 

또한 Ture는 1이고 False는 0을 의미하기도 한다

print(int(True))	# 1
print(int(True) == 1)	# True
print(int(False))	# 0
print(int(False) == 1)	# False

 

논리 연산자

 

: 조건 중 'and' 와 'or' 을 사용 하면서 특정 코드를 실행 하고 싶을 때 사용 가능하다. 비교 연산자에 더해서 같이 사용 가능하다.

논리 연산자 설명
a and b a, b 모두 True일 때, True 반환 / 반대로 하나라도 False면 False 반환
a or b a, b 혹은 True일 때, True 반환 / 반대로 둘다 False여야만 False 반환
not 반환된 True를 False로, False에서 True로 전환

 

논리 연산자를 잘 사용하기만 해도 if문 while문에서 다양하게 이용 가능하고 알고리즘 문제를 읽어보면서 사용해야만 풀 수 있기 때문에 꼭 알아두어야 한다. 한국어로는 쉬울 수 있지만 코딩에서는 살짝 다른 부분이 있다. 헷갈리므로 정확히 정리하고 가자!

# 논리 연산자 (and) 조건들을 모두 만족해야 True
print(True and True)	#True  둘다 True임을 확인하여 True이다
print(True and False)	#False 둘 중 하나가 False임을 확인하여 False이다 
print(False and True)	#False 둘 중 하나가 False임을 확인하여 False이다
print(False and False)	#False 둘다 False 임을 확인하여 False이다

# 논리 연산자 (or) 조건을 하나만이라도 만족해도 True
print(True or True)	#True 둘 다 True 임을 확인하여 True이다
print(True or False)	#True 둘 중 하나라도 True임을 확인하여 True이다 
print(False or True)	#True 둘 중 하나라도 True임을 확인하여 True이다
print(False or False)	#False 둘 다 False 임을 확인하여 False이다


# 논리 연산자 사용 예시
# 키가 170 미만이고 몸무게가 '과체중'일 경우 비만일까?
height = 168
weight = '과체중'
print(height <= 170 and weight == '과체중')	# True

# 키가 170이 미만이지만 몸무게가 '정상'일 경우 비만일까?
print(height < 170 and weight == '정상')	# False

# 키가 170 이상이지만 몸무게가 '초 과체중'이라면 비만일까?
height = 180
weight = '초 과체중'
print(height <= 170 or weight == '초 과체중')	# True
print(height <= 170 or weight == '정상')	# False

 

Falsy

 

: False는 아니지만 False로 취급될 수 있는 다양한 값들

  • 숫자 데이터 0, 0.0
  • 빈 컨테이너 (), [], {}
  • None (아래에서 나올예정)
  • " " 빈 문자열

논리 연산자들도 우선순위가 존재한다. (not, and, or 순서) 그러나 가독성과 효율성을 위해 괄호를 반드시 사용하는 것이 좋다.

# Falsy 조건을 이용한 논리 연산자
print(not False)				# True : not은 False의 반대로 전환
print(not 1)					# False : 1이라면 True를 반환하므로 반대인 False 	
print(not 'Helo')				# False : 'Helo'라면 True이므로 반대인 False
print(((not True) and False) or (not False))	# True not False가 True인데 or을 받음

 

논리 연산자의 단축 평가
  • 앞부터 결과를 훑어볼 때, 앞서 결과가 정해졌다면 이후 값은 확인하지 않고 앞의 값을 반환
  • and 연산에서 첫번째 값이 False인 경우 무조건 False 이므로 첫번째 값을 반환한다
  • or 연산에서 첫번째 값이 True 인 경우 무조건 True 이므로 첫번째 값을 반환한다.

앞의 결과가 확실하다면 뒤는 확인조차 하지 않는다. 단어가 어려워보여서 그렇지 실생활에 적용시켜보면 간단하다. 핸드폰을 산다는 상황을 생각해보자 (최근에 갤럭시 24플러스를 샀다) 

조건 1은 외관이 마음에 드는가. 조건 2는 성능이 좋은가. 라고 하자

 

and의 경우 외관도 마음에들고 성능도 좋아야 한다는 의미인데

외관이 만족을 안하는데 성능을 볼 필요가 있을까? 아니다. 바로 그 핸드폰은 쳐다도 안 볼 것이다.

반대로 외관이 마음에 든다? 그럼 성능도 확인해봐야 하지 않겠는가?

 

or의 경우 외관이 마음에 들거나 성능이 좋아야 한다는 뜻이다. 둘 중 하나만 만족해도 난 핸드폰을 사는 것인데,

만약 외관이 마음에 든다면 성능을 봐야할까? 아니다 예쁘기만하면 산다는 뜻이므로 성능은 볼 필요도 없다.

하지만 외관이 마음에 안들면 성능은 확인해보고 괜찮으면 살 수도 있고 안살 수 도 있는 것이다.

 

다양한 예시가 있겠지만, 핸드폰을 사면서 조건을 따지는 모습이 오버랩 되어서 예시로 들어보았다.

실제로 S24+ 모델과 S24 Ultra 모델 중에 고를때 고민 많이했다.

# 단축평가 : 내가 마지막으로 확인 했던 데이터를 기준으로 한다.
print(1 and 2)	# 2
print(1 and 0)	# 0
print(0 and 1)	# 0
print(0 and 0)	# 0

print(1 or 2)	# 1
print(2 or 0)	# 2
print(0 or 3)	# 3
print(0 or 0)	# 0

None

  • 파이썬의 데이터 타입 중 하나
  • 값이 없음을 표현하기 위한 None 타입이 존재
  • 일반적으로 반환하는 값이 없는 함수에서 사용하기도 함

처음 배울때만해도 이 데이터가 굳이 왜 필요할까 했는데, 함수 파트를 배우고 method를 배우면서 나름 감사한 친구였다. 왜냐면 return값이 존재하는지 안하는지 외우기가 어렵기 때문에 print 해보고 None의 결과가 나온다면 해당 함수는 return이 되지 않았거나 존재하지 않는 다는 것을 의미 하는 것이기 때문!

# None 너는 뭐하는 놈이냐.
alpha_list = ['c', 'b', 'f', 'a']
result = alpha_list.sort()	# sort()는 주어진 list를 정렬하는 함수이다
print(result)			# None
print(alpha_list)		# ['a', 'b', 'c', 'f']
print(type(result))		# <class 'NoneType'> 으로 나타난다

 

사실 sort() 함수는 return 값 없이 원본을 정렬하는 것이므로 result로 할당하는 표현을 해도 return 값이 없기 때문에 result 안에는 아무것도 존재하지 않는다. 나는 이렇게 어떤 데이터가 변하고 할당되는지 확인하는데 쓰고있다.

 

이렇게 대부분의 데이터 타입을 살펴보았는데, 외워야 할 부분도 많고 이미 알고있는 부분도 많았을 것이다. 다음 시간부터는 이런 요리재료들을 다룰 수 있는 도구들에 대해 알아볼 것이다. 나 자신에게도 여기까지 정리하느라 수고했다!!

728x90