당신은 멋쟁이, 우리는 장고쟁이~

0%

Python 기초 5편 - Data Type (숫자, 문자열, 불리언)

Data Type


데이터 타입

데이터 타입은, 값의 종류와 어떤식으로 값이 사용될지에 대해 결정합니다.

파이썬에 모든 데이터 값들은, 연관되어 있는 객체 클래스로 캡슐화 됩니다.


파이썬에서 모든것은 객체 입니다.

각 객체는 하나의 정체성을 가지고, 하나의 타입을 가지고, 하나의 값을 가집니다.


c++ 나 Java 같은 다른 객체 지향 언어처럼, 파이썬에도 몇가지 데이터 타입이 내장되어 있습니다.

C언어나, Java 로 작성된 확장 모듈을 사용하면, 추가 데이터 타입을 정의할수 있습니다.


파이썬에서 변수의 타입을 정하기 위해서는, type() 함수를 사용할수 있습니다. 객체의 값은 바뀔수도 이습니다.


mutable vs immutable


mutable (가변) 객체

값이 바뀔수 있는 객체들을, mutable (가변) 객체라고 부르고,


immutable (불변) 객체

값이 바뀔수 없는 객체들을 immutable (불가변) 객체라고 부릅니다.



파이썬 데이터 종류


파이썬에는, 아래와 같은 데이터 종류들이 존재합니다.


  1. 숫자형 (Numbers)
  2. 불리언 (Boolean)
  3. 문자열 (string)
  4. 튜플 (Tuple)
  5. 리스트 (List)
  6. 집합 (Sets)
  7. 사전 (Dictionary)
  8. None



데이터 타입 비고
숫자형 (Numbers) 숫자로 생성된 객체로, immutable 합니다.3가지 수의 타입이 존재합니다.1. 정수 (integer)2. 실수 (float)3. 복소수 (complex)
불리언 (Boolean) 파이썬에서 가장 간단한 내장 타입으로, True 와 False 를 표현합니다.
문자열 (string) 파이썬에서, 문자열 객체는 왼쪽에서부터 오른쪽으로 방향으로 순서가 있는 객체 입니다. 이를, sequence 라고 표현합니다.문자열은, ‘ 혹은 “ 으로 감싸지는 데이터 입니다.문자열은 immutable 합니다
튜플 (Tuples) 튜플은 () 안에 , 로 분리된 값들 입니다튜플은 immutable 하고, 여러 데이터 타입을 가지고 있을수 있습니다.
리스트 (Lists) 리스트는 [] 안에 , 로 분리된 값들 입니다.아무런 원소도 가지고 있지 않은 리스트를 빈 리스트라고 부릅니다.리스트는 mutable 합니다
집합 (Sets) 집합은 순서가 없는 고유한 원소들의 집합입니다.기본 사용은, 교집합, 합집합, 차집합, 합집합 같은 집합 이론을 다루거나,혹은, 중복된 것들을 없애기 위해 사용할수 있습니다.
사전 (Dictionaries) 파이썬 사전은, 리스트같이 순서가 없는 객체들의 집합의 컨테이너 입니다.객체는 {} 로 감싸져 있고. key : value 형태로, 한 쌍으로 존재합니다.각 객체 혹은 값은, key 값으로 접근이 가능하고, key 값들은 사전안에서 고유합니다. key 가 인덱싱을 할때 사용되므로, 이 key 는 immutable 타입이여야 합니다 (문자열, 숫자 혹은 튜플).
None 하나의 값을 가지고 있는 타입으로, 내장 예약어 None 으로 접근이 가능합니다. 값이 없는것을 여러 상황에서 강조하기 위해서 사용됩니다.


Numbers (숫자)


숫자 데이터 타입은, 숫자로 생성됩니다. 숫자형 객체들은 immutable 합니다.


immutable 객체는 값과 함께 생성되었을때에, 값은 바뀔수 없다는것을 의미합니다.


파이썬에는, 3가지 다른 형태의 숫자형이 존재합니다.


  1. integers (정수) - 분수 부분이 존재하지 않는, 음수와 양수 입니다
  2. floating point (실수) - 분수 부분이 존재하는 음수와 양수로, 분수 부분은 소숫점으로 나타납니다
  3. complex (복소수)

정수에 대한 예시


1
2
3
4
5
6
7
8
9
10
# 숫자형, 정수, integers 
a = 1218

print(type(a))

b = -4212
print(type(b))

c = 0
print(type(c))

실수에 대한 예시


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 숫자형, 실수, float 

g = 1.05
print(type(g))

h = -11.23
print(type(h))

i = -0.34

print(i)
print(type(i))

j = 2.12e-10

print(j)
print(type(j))

k = 5E220
print(k)
print(type(k))

정수와 실수 숫자 데이터의 연산


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 숫자형 데이터의 연산 예시 
# 실수와 정수

x = 8
y = 7

print(x + y)
print(x - y)
print(x / y)
print(x * y)

# 지수 exponentials
x = 4 ** 3
y = 3 ** 4
print(x)
print(y)

# 나누기 division
# //
print(12 / 3)
print(64 // 4)
print(15 // 3)

# 나머지값 remainder
# %
print(15%4)


복소수 (Complex Number)


수학적으로, 하나의 복소수 (주로 공학에서 사용되는 수)는 하나의 숫자가 A + Bi 의 형태로 되어 있고, A 는 real 파트, Bi 는 imaginery 파트를 의미 합니다.

파이썬은 이런 복소수들에 대한 것도 지원합니다

아래 두가지 형태를 사용하거나,

  • (real + imagJ)
  • (real + imagj)

혹은, 내장 함수인, complex(x, y) 를 사용하여 지정할수 있습니다


복소수의 예시


1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 복소수 complex 

x = complex(1,3)
print(type(x))

print(x)

z = 1 + 2j
print(z)
print(type(z))

z = 1 + 3J
print(z)
print(type(z))

Boolean (bool)


파이썬에서 가장 간단한 내장 타입으로, True 와 False (참과 거짓) 을 표현하는 데이터 형식입니다. 불리언의 예시는 아래와 같습니다.


1
2
3
4
5
x = True 
print(type(x))

y = False
print(type(y))

Strings (문자열)


파이썬에서 문자열 객체는 하나의 sequence, 왼쪽에서부터 오른쪽 방향으로 순서가 있는 문자들입니다.

‘’ 혹은, “” 으로 감싸지는 문자 데이터이고, immutable 합니다.


문자열을 선언하는것은 굉장히 간단합니다. 아래 예시를 들어봅니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# "" 쌍따옴표로 감싸진 문자열 txt 
txt1 = "Django"
print(txt1)
print(type(txt1))

# '' 외따옴표로 감싸진 문자열 txt
txt1 = 'Django'
print(txt1)
print(type(txt1))

# '''''' 혹은 """""" 로 감싸진 문자열
# ' 3개 혹은 " 3개를 사용해서 감싸면, 다수의 줄을 가지는 문자열을 선언할수 있다.
txt1 = '''Django'''
print(txt1)
print(type(txt1))

txt1 = """Django"""
print(txt1)
print(type(txt1))

예시에서 볼수 있듯이, ‘’, “”, “”””””, ‘’’’’’ 는 모두 같은 효과를 냅니다.


또한, ‘,”‘ 혼용은 에러를 일으킵니다. 아래에는, 따옴표를 잘못 사용하여 나타나는 에러의 예시들입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# " 로 시작하여, ' 로 끝납니다. 
# 이는 에러를 발생 시킵니다.

txt = "Django'

# "" 안에 또다른 " 를 가질수 없습니다
# 이는 에러를 일으킵니다.
txt = "Django day"s great"

# '' 안에 또다른 '' 를 가질수 없습니다
# 이는 에러를 일으킵니다.
txt = 'Django day's great'

# "" 안에 따옴표를 사용하려면 ' 를 사용하여 중복사용을 피해야 합니다.
txt = "Django's day is great!"
print(txt)
print(type(txt))

문자열에서 특수 문자들


백슬레쉬 문자를 사용하여, 특수 문자를 사용할수도 있습니다.




  1. \n - 새로운줄

  2. \t - 탭

  3. \\ - 백슬레쉬

  4. \' - 외따옴표

  5. \" - 쌍따옴표




문자열 인덱싱과 문자열 요소들


문자열은, 문자들의 배열이고, 하나의 배열 요소는 인덱싱을 사용하여 접근 가능합니다.


인덱스는 왼쪽에서 0 으로부터 시작하고

오른쪽에서 -1 으로부터 시작합니다


text = "Django" 라는 문자열이 있다고 가정하고, 이 문자열의 인덱스 번호들은 아래와 같이 표현될수 있습니다.




문자 D j a n g o
인덱스(왼쪽) 0 1 2 3 4 5
인덱스(오른쪽) -6 -5 -4 -3 -2 -1




위 테이블을 가지고 예시를 들어보면,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 인덱싱 값을 사용하여, 문자열의 요소들을 접근할수 있습니다. 

text = 'Django'


# 왼쪽에서부터 시작했을경우
print(text[0])
print(text[1])
print(text[2])
print(text[3])
print(text[4])
print(text[5])
print()

# 오른쪽에서부터 시작할경우
print(text[-1])
print(text[-2])
print(text[-3])
print(text[-4])
print(text[-5])
print(text[-6])

하지만, 인덱스 값을 벗어나서 접근하려 하면, 에러가 발생 합니다!


1
2
3
4
5
6
7
8
9
# 에러가 발생하는 케이스 

# -7 번째 인덱스는 존재하지 않으므로, 에러를 발생 시킵니다
text = "Django"
print(text[-7])

# 6 번째 이후의 인덱스는 존재하지 않으므로, 에러를 발생 시킵니다
text = "Django"
print(text[6])


문자열은 immutable (불변)


문자열들은 immutable 합니다

문자열의 요소들의 값은 변경될수 없습니다. 문자열 값들은 변경이 불가능 합니다


예시를 들자면, 아래와 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 문자열이 한번 생성되면, 문자열의 문자의 값은 바꿀수가 없습니다.
# immutable

text = "Django"
text[0]
text[0] = "Z"

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-35-4320dce556f8> in <module>
1 text = "Django"
2 text[0]
----> 3 text[0] = "Z"

TypeError: 'str' object does not support item assignment

문자열에서 in 연산자


in 연산자는, 해당 문자가, 문자열 안에 존재하는지 확인할수 있게 해줍니다. 이 연산자는, 결과값으로 불리언 값을 반환합니다 (True 혹은 False)


1
2
3
4
5
6
7
8
9
text = 'Django'
is_z_in = 'z' in text
print(is_z_in) # 'z' 는 Django 안에 존재하지 않으므로, False 를 반환

is_D_in = 'D' in text
print(is_D_in) # 'D' 는 Django 안에 존재하므로, True 를 반환

is_word_in = 'jango' in text
print(is_word_in) # 'jango'는 Django 안에 존재하므로, True 를 반환

문자열 슬라이싱


문자열로부터 문자들을, 빼고 잘라내는것을 슬라이싱 이라고 부릅니다. 두개의 인덱스 번호가 : 으로 분리가 되어져 사용됩니다.


슬라이스 2:5 가 의미 하는 바는,

문자열의 2번째, 3번째, 4번째 요소를 잘라내는 것입니다 (5번째는 포함되지 않습니다)




문자 D j a n g o
인덱스(왼쪽) 0 1 2 3 4 5
인덱스(오른쪽) -6 -5 -4 -3 -2 -1

문자열 슬라이싱 예시는 아래와 같습니다.


1
2
3
4
5
6
7
8
text = "Django"

print(text[0:3]) # 0, 1, 2 인덱스에 해당하는 문자들을 출력
print(text[2:5]) # 2, 3, 4 인덱스에 해당하는 문자들을 출력

print(text[-4:-1]) # -4, -3, -2 인덱스에 해당하는 문자들을 출력

# text[-4:-1] 는 -1에서 1을 뺀 -2 인덱스까지 잘라냅니다

형태 변환


데이터 타입의 형태 변환은 가능합니다. 예를들면,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 문자열을 실수로 전환 
print(float("4.3"))

# 문자열을 정수로 변환
print(int("1218"))

# 실수를 정수로 변환
print(int(12.184))

# boolean 을 숫자로 표현, true 는 1, false 는 0 을 갖습니다.
print(int(True))
print(int(False))
print(float(True))
print(float(False))

# boolean 을 문자로 표현
print(str(True))
print(str(False))

# 숫자, 문자, 실수를 불리언으로 표현
# 값이 있으면 True, 0 이거나 없으면 False 를 반환
print(bool())
print(bool(0))
print(bool('Hello world'))
print(bool(12.18))