코린이의 소소한 공부노트

데이터 타입, 연산자 (1) 숫자형, 논리형 본문

Python

데이터 타입, 연산자 (1) 숫자형, 논리형

무지맘 2021. 4. 22. 00:44

데이터는 여러 가지 형태로 존재하며, 각각의 타입을 갖고 있다.

그리고 타입마다 연산 방법도 다르다.

 

이번에 정리할 데이터 타입은

1. 숫자형

2. 논리형이다.


1. 숫자형(Numeric type)


숫자형에는 정수형(Integers: int), 실수형(Floating point numbers: float), 복소수형(complex numbers: complex)이 있다.

num_int = 4                     # 정수형, int
num_float = -58.2               # 실수형, float
num_complex1 = complex(3, -1)   # 복소수형, complex(실수부, 허수부)
num_complex2 = 3-1j             # ( ) 풀어서 써도 되고
num_complex3 = -1j+3            # 실수부와 허수부를 바꿔써도 된다.
print(num_int, num_float, num_complex1, num_complex2, num_complex3)
>> 4 -58.2 (3-1j) (3-1j) (3-1j)

특이한 것은 복소수인데

- 정수나 실수와는 다르게 ( )에 둘러싸여 출력이 되고,

- 수학에서는 i로 쓰던 걸 파이썬에서는 j(또는 J)로 표시한다.

- 수학에서는 -1i를 -i로 쓰지만, 여기서는 -1i라고 꼭 명시해야한다.

(3-j로 쓰면 j를 변수 이름으로 인식해서 우리가 의도한 결과가 나오지 않는다.)

복소수형은 쓸 일이 별로 없으므로, 앞으로 말하는 숫자형은 정수나 실수를 뜻하는 것으로 하겠다.

 

숫자형은 범위가 달라도 섞어서 계산이 가능하다.

a = 1
b = 2.5
c = a+b
type(c), c
>> (float, 3.5)

정수는 실수의 부분집합이기 때문에 더 넓은 범위인 실수로 c의 타입이 결정된다. (출력이 소괄호 ()에 둘러싸여 나온 이유는 '데이터 타입, 연산자 (3) 리스트, 튜플'에서 알게되니 궁금해도 조금만 참자.)

 

숫자형 연산자(Numeric operators)는 다음과 같다.

a = 10
b = 3
a + b 	  # 10 + 3 = 13
a - b     # 10 - 3 = 7
a * b	  # 10 * 3 = 30
a / b	  # 10 / 3 = 3.3333...
a ** b	  # 10^3 = 1000
pow(a, b) # 10^3 = 1000
a // b 	  # 10 / 3의 몫(의 내림) = 3
a % b 	  # 10 / 3의 나머지 = 1

위 연산자들은 변수에 값 할당 시 다른 방법으로 표현이 가능하다.

a = 2
b = 3
a += b    # a = a + b
print(a)  # a = 2 + 3
>> 5

a **= b   # a = a ** b
print(a)  # a = 5 ** 3
>> 125

한 변수에 연산 후 값 할당이 계속 이루어진다면 위와 같은 방법으로 하면 코드도 간결해지고 마음도 편안해진다!


a // b 부분에 대한 추가 설명을 하겠다.

파이썬 문서를 보면, // 연산자에 대한 설명에 이런 것이 있다.

The result is always rounded towards minus infinity.

결과는 항상 음의 무한대 쪽으로 (어색하지만) 반올림한다는 정도로 해석할 수 있다. 즉, 몫의 가우스값을 뜻한다.

파이썬 문서의 예시를 그대로 가져와 부연 설명을 해보자면,

(1) 1//2 is 0 : $ 1 \div 2 = 0.5 $이므로 0.5보다 작은 정수 중 가장 큰 0이 된다.

(2) (-1)//2 is -1 : $ -1 \div 2 = -0.5 $이므로 -0.5보다 작은 정수 중 가장 큰 -1이 된다.

(3) 1//(-2) is -1 : (2)와 동일하다.

(4) (-1)//(-2) is 0 : (1)과 동일하다.


2. 논리형(Boolean type)


논리형은 맞다(True) / 틀렸다(False)로 구분되는 타입이다. True는 숫자 1로, False는 숫자 0으로도 대체해서 쓸 수 있기 때문에 정수형(Integers)의 하위타입(subtype)이라고도 한다. (빈 문자열, None 등도 False를 나타내고, 나머지 값들은 다 True를 나타내긴 하는데, 타입에 대해 조금 더 배워보면 알 수 있다.)

 

(1) 논리형은 비교 연산자(Comparison operators)의 결과로 나올 수 있다.

a = 1
b = 2
# 크기 비교
a > b   # False
a < b   # True
a >= b  # False
a <= b  # True
# 같은지 다른지 비교
a == b  # False
a != b  # True

(2) 논리형은 논리형 연산자(Boolean operators)를 이용해 결과를 낼 수 있다.

x = True
y = False
x and y  # False
x or y   # True
not x    # False
not y    # True

파이썬 문서에 논리형 연산자가 어떻게 계산되는지 설명이 나와있다.

x and y  x가 False이면 결과는 x, 아니라면 결과는 y
x or y  x가 False이면 결과는 y, 아니라면 결과는 x
not x  x가 False이면 결과는 True, 아니라면 결과는 False

and는 모두가 True여야 결과가 True가 나오고, or는 하나 이상이 True이면 결과가 True가 나온다.

not은 결과가 반대로 나오는데, not 연산자는 연산 우선순위가 논리형 연산자가 아닌 것보다 더 낮다.

때문에 우리가 not a == b라고 쓰는 것은 not (a == b)로 계산이 되고, a == not b는 SyntaxError가 나온다. 에러를 해결하려면 a == (not b)로 해야 의도대로 계산된다.

연산 우선순위를 정리해보면 비논리형(non-boolean) 연산자 > not > and > or이다.


< 요약 >

 

1. 숫자형: 정수, 실수, 복소수

 - 연산: 사칙연산, 제곱 등

2. 논리형: True, False

 - 비교 연산자의 결과는 논리형

 - 논리형 연산자: not > and > or