[파이썬] 자료형

job.study·2022년 12월 28일
0

python

목록 보기
1/1

해당 게시글은 강의 및 인터넷 검색, 다양한 서적 등을 기반으로 작성됩니다. 혹시 오류가 있다면 댓글로 지적해주시면 감사하겠습니다.
참고 자료 : jump to python / python 공식 문서
버전 : Python 3.9


목표 : 자료형의 종류에 대해 이해하고 사용한다.

1. 자료형의 종류에 대해

 자료형은 숫자형, 문자열, 리스트, 튜플, 딕셔너리, 집합, 자료형이 있다. 이러한 자료형의 값을 저장하는 공간을 변수라고 부르고, 파이썬의 변수 자료형은 유동적으로 변하기 때문에, 동적 타입 언어라고도 한다.
 정확하게는 런타임 시 타입이 결정된다고 한다. C언어와 C++과 같은 경우가 정적 타입 언어인데, 정적 언어는 반드시 변수의 타입을 직접 지정해주어야 하며, 문자열과의 혼용도 대부분의 경우 불가능하다. 변수에 들어갈 수 있는 자료형에 대해 구체적으로 알아보자.

2. 숫자형

 숫자형 : 1, 2, 3, ... 이와 같은 값들이 숫자형 자료형이다. 이때, 숫자형 자료형에는 작은 따옴표나 큰 따옴표가 들어가지 않음에 유의하자. 숫자형 자료형은 연산이 가능한데, +, -, *, /, %, //, **가 연산 기호이다. 만약 a = 2 이고, b = 3 일 때, 예제와 결과는 다음과 같다.

기호의미예제결과
+숫자의 합a+b5
-숫자의 차a-b-1
*숫자의 곱a*b6
/숫자의 나눗셈a/b0.66666...
//숫자의 몫a//b0
%숫자의 나머지a%b3
**숫자의 제곱a**b8
 아래와 같이 실제 코드를 작성해서 실행해보면, 위 결과값을 직접 확인할 수 있다.
a = 2
b = 3

result1 = a + b # 덧셈
result2 = a - b # 뺄셈
result3 = a * b # 곱셈
result4 = a / b # 나눗셈
result5 = a // b # 몫
result6 = a % b # 나머지
result7 = a ** b # 제곱

 이때, 0.6666... 이 값을 보자. 만약 이 값을 실수 형식이 아닌 정수로 출력하고 싶다면 (int)(a/b)를 기입하면 된다.1 만약 짧은 실수 형식으로 출력하고 싶다면 int 대신 float를 사용하면 된다. 이것을 형변환이라고 한다.
 C 등의 언어에서는 위와 같이 형변환을 하는 것이 주이지만, 파이썬의 경우, int(a/b)의 형태도 제공하는 듯 하니, 자세한 것은 python내장함수를 참조하는 것을 추천한다.

3. 문자열

 문자열 : '1', '2', 'ㄱ', 'a', 'b', 'asdf', '안녕하세요' 등을 문자열 자료형이라고 정의한다. 예시에는 작은 따옴표만 썼지만, 큰 따옴표 역시 사용할 수 있음에 유의하자. 또한, 문자열 자료형에는 문자열 뿐만 아니라 문자도 포함되어 있음을 유의하자. 만약 a가 'I'이고, b가 'am'라는 문자열 자료형일 때, 다음과 같은 연산이 어떻게 동작하는지 알아보자.

a = "I"
b = "am"

result1 = a + b # 덧셈
result2 = a * 3 # 곱셈

result1 = "Iam"
result2 = "III"

 이와 같이, 문자열의 연산이 가능하다. 이 외에도 문자열의 슬라이싱과 인덱스라는 것이 있다. 문자열의 슬라이싱과 인덱스는 리스트를 다루는 것과 유사하므로, 우선은 넘어가고 리스트에서 다시 설명하도록 하겠다.
 문자열을 쓸 때, 큰 따옴표와 작은 따옴표를 쓴다. 그러나, 만약 큰 따옴표를 문자열 내에 쓰고 싶다면? 혹은 작은 따옴표를 문자열 내에 쓰고 싶다면 어떤 방법이 있는가? 만약 둘 다 쓰려고 한다면 어떻게 해야하는가? 파이썬에는 이에 대한 방법 또한 있다.

a = "I'm happy" 
# 작은 따옴표를 반드시 써야한다면 큰 따옴표로 주변을 둘러싼다.
b = 'He say, "Are you OK?"'
# 큰 따옴표를 반드시 써야한다면 작은 따옴표로 주변을 둘러싼다.
c = "She say, \"I'm OK\""
# 만약 두 개 모두 들어간다면 `이스케이프 코드`를 사용한다.

 위와 같은 방법을 쓸 수 있다. a와 b와 같은 경우는 어렵지 않다. 겹치지 않게 사용하면 되기 때문이다. 그러나 둘 다 써야하는 경우, 대책이 필요하다. 이때 쓸 수 있는 것이 바로 이스케이프 코드이다. 이스케이프 코드란, 프로그래밍 할 때 미리 정해진 문자 조합이다. 역슬래시(원 단위 표시 기호 위가 역 슬래시의 기호이다.) 자주 사용하는 다섯가지만 표로 정리해보았다.

기호의미
\n줄바꿈
\t탭 간격
\\\(역슬래시 작성)
\'작은 따옴표( ' ) 작성
\"큰 따옴표( " ) 작성

 프로그래밍을 하다보면, 문자열 내에 받은 값을 넣고 싶은 경우도 있을 것이다. 즉, 어떤 값을 따로 기입하거나 변수를 넣고 싶을 경우가 있을 것이다. 이 때에는 어떻게 해야하는가? 이때 사용하는 것이 포매팅이다. 포매팅에는 다음과 같은 형식이 있다.

기호의미
%d정수
%c문자 1개
%f부동소수점(실수)
%o8진수
%x or %X16진수
(%x는 소문자로 출력,
%X는 대문자 출력)
%s문자열(String)
%%% (문자 %)

이런 포매팅은 어떻게 사용하는가? 아래와 같은 예제를 만들어보자.

a = "Hello."
b = 10
c = 1.123456789
d = "y"

print("다음을 출력합니다 : %s" %a) 
print("다음을 출력합니다 : %d" %b) 
print("다음을 출력합니다 : %f" %c) 
print("다음을 출력합니다 : %c" %d) 

print("%f의 값을 %.4f까지 나타냅니다." %(c,c))
print("%0.4f의 값을 10칸 띄워서 출력합니다 : %10.4f" %(c,c)) 

결과값

다음을 출력합니다 : Hello.
다음을 출력합니다 : 10
다음을 출력합니다 : 1.123457
다음을 출력합니다 : y
1.123457의 값을 1.1235까지 나타냅니다.
1.1235의 값을 10칸 띄워서 출력합니다 :     1.12352

기타 다양한 방법은 점프 투 파이썬과 이어지는 해당 링크를 참고할 것.

4. 불

  : True, False 두 가지가 불 자료형이다. 참 / 거짓을 나타내며, 경우에 따라 비어있는 값이나 0의 값은 거짓으로, 이외의 값은 참으로 여겨지기도 한다.

a = True
b = False

if a == 0 :
	print("a는 0이다")
elif a==1 :
	print("a는 1이다")
else :
	print("a는 알 수 없다.")
    
if b == 0 :
	print("b는 0이다")
elif b == 1 :
	print("b는 1이다")
else :
	print("b는 알 수 없다.")

과연 이렇게 하면 값은 어떻게 나올까? 실제로 돌려본 바, 결과값은 다음과 같이 나타난다.

결과값

a는 1이다
b는 0이다

즉 True는 1의 값과, False 값은 0의 값과 일치한다는 것을 알 수 있다.

5. 리스트

 리스트 : [1,2,3]과 같이 [ ] 사이에 나열된 값들을 말한다. 이때, 리스트 안에는 이때까지 보았던 숫자형, 문자열, 불 자료형을 모두 사용해서 넣을 수 있다. 심지어는 리스트 자체까지 넣을 수 있는데, 이에 대해서는 추후 다룰 기회가 있다면 다루도록 하겠다.
 리스트는 인덱싱슬라이싱이라는 것이 있다. 인덱싱은 리스트 내의 특정한 값을 집어 선택하는 것이며, 슬라이싱은 리스트 내의 여러 값을 뽑아 골라오는 것이다. 이때, 주의해야할 점이 있다. 리스트는 0부터 값이 시작된다. 따라서 이를 고려하여 코드를 짜야할 것이다.

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

slicingList1 = list1[:5] # 0번째부터 5번째까지
slicingList2 = list1[0:5] # 0번째부터 5번째까지
slicingList3 = list1[2:5] # 2번째부터 5번째까지
slicingList4 = list1[2:] # 2번째부터 끝까지
slicingList5 = list1[:] # 전체
silcingList6 = list1[::2] # 2칸씩 건너뜀
slicingList7 = list1[::-1] # 거꾸로 배치


indexingList1 = list1[0] 
# 리스트의 맨 앞(0번째)에서 값을 가져온다.
indexingList2 = list1[-1]
# 리스트의 맨 뒤(9번째)에서 값을 가져온다.

결과값

slicingList1 = [0, 1, 2, 3, 4]
slicingList2 = [0, 1, 2, 3, 4]
slicingList3 = [2, 3, 4]
slicingList4 = [2, 3, 4, 5, 6, 7, 8, 9]
slicingList5 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
slicingList6 = [0, 2, 4, 6, 8]
slicingList7 = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
indexingList1 = 0
indexingList2 = 9

이와 같이 리스트의 값이 뽑혀나옴을 알 수 있다.

6. 튜플

 튜플 : (1, 2, 3)과 같이 () 사이에 나열된 값들을 말한다. 이때 한 번 생성된 튜플은 수정이 불가능하다. 단일 데이터는 튜플이 될 수 없음에 주의할 것.
 튜플은 변경은 안 되지만, 병합은 가능하다. 그러나 기존 튜플에 병합은 불가능하고, 새로운 튜플을 만들어서 두 튜플이 병합된 튜플을 생성할 수 있다. 또한, 인덱스를 활용하여 튜플에서 값을 꺼내와 변수에 집어넣기도 한다.
 튜플에서 인덱스가 되는 것처럼 슬라이싱도 가능하다. 유의할 점이 있다면, 튜플은 단일 데이터는 튜플이 될 수 없기 때문에, 단 하나의 데이터만 들어가야한다면 (1,)과 같이 반점을 반드시 찍어준다.

7. 딕셔너리

 딕셔너리 : 딕셔너리는 해시 테이블이라고도 불리는 구조로, 키와 값을 작성해주어 정의해주는 방식이다. 이하 예시를 보자.

data = {"ID": "asdf1234", "Password" : "12341234asdf", "Email": "asdf1234@velog.io"}
# 데이터 정의
dataId = data["ID"]
# 데이터 가져오기
data["Password"] = "zxcv12341234"
# 데이터 변경
data["phoneNum"] = "010-1111-2222"
# 데이터 추가
del data["Email"]
# 데이터 삭제

결과

data 값의 정의 : {'ID': 'asdf1234', 'Password': '12341234asdf', 'Email': 'asdf1234@velog.io'}
가지고 온 data : 'asdf1234'
Password의 변경 : {'ID': 'asdf1234', 'Password': 'zxcv12341234', 'Email': 'asdf1234@velog.io'}
내용의 추가 : {'ID': 'asdf1234', 'Password': 'zxcv12341234', 'Email': 'asdf1234@velog.io', 'phonNum': '010-1111-2222'}
내용의 삭제 : {'ID': 'asdf1234', 'Password': 'zxcv12341234', 'phoneNum': '010-1111-2222'}

8. 집합

set이라는 함수가 집합을 만든다. set(리스트)와 같이 이용이 가능하고, set을 사용하면 중복되는 값은 모조리 사라지고 순서없이 정렬된다.

참고. 리터럴

변수가 아닌 고정된 데이터를 리터럴이라고 부른다. 즉 a라는 이름에 10이라는 숫자를 넣기로 했다면, a는 변수이고, 10은 숫자형 리터럴인 것이다.


_각주
1 이때, (int)a/b를 하게 되면, a값만을 정수로 바꾸게 되므로 주의하자.
2 10칸 띄워지지 않는다. 확인 필요.

profile
초보자 / 컴퓨터 공부 중♬

0개의 댓글