1. 기본 자료형 Last updated: 2023-10-17 10:28:52

이 장에서는 파이썬에서 지원하는 기본적인 자료 형식에 대해 알아볼 것이다. 파이썬 프로그램에서 표현하고자 하는 대표적인 데이터는 소수점이 없는 음과 양의 값을 나타내는 정수형 변수, 소수점을 포함하는 실수형 변수, 글자를 저장할 수 있는 문자열 변수와 참과 거짓에 해당하는 True와 Falss를 표현할 수 있는 불리언 변수가 있다.

1.1 정수형

파이썬에서 정수 데이터를 저장하는 변수 유형은 integer 이다. 파이썬 2에서는 큰 값을 다루기 위해 long 타입이 존재 했었지만 파이썬 3에서는 long을 더이상 지원하지 않고 숫자형은 모두 integer로 통일되었다. 파이썬에서 부수를 갖는 정수형 데이터는 모두 integer이고 값을 크기 제한은 없다.

Hint! 숫자형 변수 타입 선택

만일 숫자형 변수를 숫자 크기에 따라 구분하여 변수 타입을 정하고 싶다면 Numpy의 변수형을 사용하시기 바란다.



1.1.1 십진수 값으로 정수형 변수 생성

십진수에 해당하는 정수 값을 정수형 변수에 저장하는 방법을 알아보자. 프로그램 언어에 따라 변수를 선언할 때 데이터 형을 지정해주는 방식이 있고, 그렇지 않고 값을 대입하면 알아서 변수형을 정하는 언어가 있다. 파이썬은 변수를 선언할 때 따로 형식을 지정할 필요가 없고 변수 이름을 지정하고 값을 대입하면 자동으로 알맞은 형식의 변수를 생성한다.

[예제 3-1] 십진수 덧셈하기

a = 10
b = 20
c = a + b
print(c)

[결과]

30


1.1.2 2진수 값으로 정수형 변수 생성

A. 2진수 값 입력

2진수 값은 입력 당시는 2진수 이지만 변수에 저장되고 나면 10진수로 계산되고, 이후에 10진수와 동일하게 생각하면 된다.

[예제 3-2] 2진수 덧셈하기

a = 0b10
b = 0b100
c = a + b
print(a, "+", b, "=", c)

[결과]

2 + 4 = 6


B. 2진수 문자열 출력

십진수 정수를 2진수로 출력하려면 bin( ) 함수를 사용하면 된다.

[예제 3-3] 8진수 출력하기

c = 0o110
print("십진수", c, "은 2진수로 ", bin(c), "이다.")

[결과]

십진수 6 은 2진수로  0b110 이다.

format( ) 함수를 사용할 수도 있다. ’b’ 문자를 전달하여 2진수 임을 알려준다.


[예제 3-4] 2진수 포맷팅하기

Print(format(72, 'b'))
Print(format(72, '#b'))

[결과]

1001000
0b1001000


1.1.3 8진수 값으로 정수형 변수 생성

8진수 값은 입력 당시는 8진수 이지만 변수에는 10진수로 계산되고, 이후에는 10진수와 동일하게 생각하면 된다.


A. 8진수 값 입력

[예제 3-5] 8진수 덧셈하기

a = 0o10
b = 0o20
c = a + b
print(a, "+", b, "=", c)

[결과]

8 + 16 = 24

B. 8진수 문자열 출력

십진수 숫자를 8진수 문자열로 출력하려면 oct( ) 함수를 사용하면 된다.

[예제 3-6] 8진수 출력하기

c = 0o30
print("십진수", c, "는 8진수로 ", oct(c), "이다.")

[결과]

십진수 24 는 8진수로  0o30 이다.

format( ) 함수를 사용할 수도 있다. ’x’ 문자를 전달하여 16진수임을 알려준다.


[예제 3-7] 8진수 포맷팅하기

print(format(72, 'o'))
print(format(72, '#o'))

[결과]

110
0o110


1.1.4 16진수 값으로 정수형 변수 생성

16진수 값은 입력 당시는 16진수 이지만 변수는 10진수로 계산되고, 이후에는 10진수와 동일하게 생각하면 된다.


A. 16진수 값 입력

16진수 값을 숫자형 변수에 지정하려면 16진수 표기에 따라 0x를 앞에 붙이고 이어 16진수 숫자 값을 입력하면 된다.

[예제 3-8] 16진수 덧셈하기

a = 0x10
b = 0x20
c = a + b
print(a, "+", b, "=", c)

[결과]

16 + 32 = 48


B. 16진수 문자열 출력

십진수 숫자를 16진수 문자열로 출력하려면 hex( ) 함수를 사용하면 된다.

[예제 3-9] 16진수 출력하기

c = 0xff
print("십진수", c, "는 16진수로 ", hex(c), "이다.")

[결과]

십진수 255 는 16진수로  0xff 이다.

format( ) 함수를 사용할 수도 있다. ’x’ 문자를 전달하여 16진수임을 알려준다.


[예제 3-10] 16진수 포맷팅하기

print(format(72, "x"))
print (format(72, "#x"))

[결과]

48
0x48


1.1.5 문자열을 숫자형으로 변환하기

int( ) 함수를 사용하면 2진수, 8진수, 16진수 등의 문자열을 숫자로 변환할 수 있다.

형식

int = int(str, base=10)

파라미터

str (string) : 문자열
base (int) : 진수, 기본값은 10

반환

(int) 문자열의 길이

[예제 3-11] 2진수 숫자 문자열 변환하기

print(int("0b101010", 2))
print(int("101010", 2))

[결과]

42
42

[예제 3-12] 8진수 숫자 문자열 변환하기

print(int("0o101010", 8))
print(int("101010", 8))

[결과]

33288
33288

[예제 3-13] 16진수 숫자 문자열 변환하기

print(int("101010"))
print(int("101010", 16))

[결과]

101010

[예제 3-14] 16진수 숫자 문자열 변환하기

print(int("0x101010", 16))
print(int("101010", 16))

[결과]

1052688
1052688


1.2 실수형

파이썬에서 실수 데이터를 저장하는 변수 유형은 float이다. 변수에 실수 값을 숫자로 지정하면 float 형으로 저장된다.


1.2.1 실수형 변수 생성

다음은 실수를 실수 변수에 입력하는 형식이다.

형식

var = 실수

설명

변수에 실수 값을 직접 입력하는 방법입니다.
실수라고 하면 1.1, 1.2, 0.1과 같이 정수부와 소수부가 있는 숫자를 말합니다.

정수를 실수로 변환하는 형식은 다음과 같다.

형식

var = 정수

설명

정수부만 있고 소수부가 없는 숫자를 입력하는 경우 실수라는 것을 알려주기 위해 정수부 끝에 점을 찍어 실수임을 알려주는 방식입니다.

숫자를 float( )함수를 이용해 실수로 변환하는 형식은 다음과 같다.

형식

var = float(숫자 혹은 문자열)

설명

실수, 정수, 문자열 등 어떤 데이터라도 float( ) 함수를 이용해 명시적으로 실수 형식으로 변환하는 방식입니다.

[예제 3-15] 실수 입력을 통한 실수 변수 생성 예시

num = 10.1
print(num)
print(type(num))

[결과]

10.1
<class 'float'>

[예제 3-16] 정수 입력을 통해 실수 변수 생성 예시

num = 10.
print(num)
print(type(num))

[결과]

10.0
<class 'float'>

[예제 3-17] float( ) 함수로 통해 정수를 실수로 변환하기

num = float(10)
print(num)
print(type(num))

[결과]

10.0
<class 'float'>

[예제 3-18] float( ) 함수로 통해 문자열을 실수로 변환하기

num_str = '10.0'
num = float(num_str)
print(num)
print(type(num))

[결과]

10.0
<class 'float'>


1.2.2 실수 데이터 정확성

실수 데이터는 정수와 다르게 소수점 값이 딱 떨어지지 않는다. 따라서 등호(==)로 같은지 비교를 할 때 주의해야 한다. 다음은 실수와 실수와 더하기 연산 결과이다. 소수점 이하 입력 값이 예상한 것과 다르다.

[예제 3-19] 실수 덧셈 연산하기

f1 = 0.1
f2 = 0.02

f1 + f2

[결과]

0.12000000000000001

따라서 아래와 같이 두 값이 같은지 등호(==) 비교하면 True가 False로 결과가 나온다.


[예제 3-20] 실수 등호 연산하기

f1 = 0.1
f2 = 0.02
f3 = f1 + f2

f3 == 0.12

[결과]

False


1.2.3 실수 데이터 연산

실수와 정수의 곱셈 혹은 나눗셈 연산 결과는 실수이다.

[예제 3-21] 실수 곱셈 연산하기

_f = float(10.0)
_i = 2

c = _f * _i
print(c)
print(type(c))

[결과]

20.0
<class 'float'>

실수와 정수의 덧셈과 뺄셈 연산 결과는 실수이다.


[예제 3-22] 실수 덧셈 연산하기

_f = float(10.0)
_i = 2

c = _f + _i
print(c)
print(type(c))

[결과]

12.0
<class 'float'>


1.3. 문자열

파이썬에서 문자열은 문자로 이루어진 단어나 문장 등을 의미한다. 문자열 또한 문자의 배열이므로 배열에서 사용되는 특성을 그대로 따른다. 문자열을 고려할 때 가장 먼저 떠오르는 것은 문자열을 생성하는 방법이다.


1.3.1 문자열 생성

문자열 변수를 생성하는 방법에 대해 알아보자.


A. 큰 따옴표 한 개 사용

문자열 시작과 끝에 큰 따옴표를 이용해 문자열의 시작과 끝을 알려주어 문자열을 생성한다. 생성한 문자열을 str_title 변수에 저장한다.

[예제 3-23] 쌍 따옴표를 이용해 문자열 생성하기

str_title = "Hello Python World!"


B. 작은 따옴표 한 개 사용

문자열 시작과 끝에 작은 따옴표를 이용해 문자열의 시작과 끝을 알려주어 문자열을 생성한다. 생성한 문자열을 str_title 변수에 저장한다.

[예제 3-24] 따옴표를 이용해 문자열 생성하기

str_title = 'Hello Python World'


C. 큰 따옴표 세 개 사용

문자열 시작과 끝에 큰 따옴표를 이용해 문자열의 시작과 끝을 알려주어 문자열을 생성한다. 생성한 문자열을 str_title 변수에 저장한다. 따옴표를 3개 사용하면 여러 줄에 걸친 문자를 입력할 때 편리한다.

[예제 3-25] 삼중 따옴표를 이용해 문자열 생성하기

str_title = """Hello Python World!"""
print(str_title)

[결과]

Hello Python World!

여러 줄에 걸쳐 문자를 입력하면 줄 사이에 개행 문자가 추가되어 여러 줄로 출력이 된다.


[예제 3-26] 문자열 줄바꿈 처리하기

str_title = """Hello
Python World!"""

print(str_title)

[결과]

Hello
Python World!

여러 줄에 걸쳐 입력하게 줄 마지막에 역슬레시 문자를 입력하면 개행 문자가 추가되지 않고 연결되어 한 줄로 출력된다.


[예제 3-27] 문자열 여러줄 입력하기

str_title = """Hello\
Python World!"""

print(str_title)

[결과]

Hello Python World!


D. 작은 따옴표 세 개 사용

문자열 시작과 끝에 큰 따옴표를 이용해 문자열의 시작과 끝을 알려주어 문자열을 생성한다. 생성한 문자열을 str_title 변수에 저장한다.

[예제 3-28] 삼중 작은 따옴표 이용 문자열 생성하기

str_title = '''Hello Python World!'''
print(str_title)

[결과]

Hello Python World!

물론 작은 따옴표 세 개도 큰 따옴표 세 개와 같이 여러 줄에 걸쳐 작성할 수 있다.


Hint ! 따옴표는 앞뒤가 같게

문자열 변수를 생성할 때 시작 따옴표가 큰 따옴표이면 끝날 때도 큰 따옴표여야 한다. 시작과 끝의 따옴표 종료가 달라지면 안된다.



1.3.2 문자열 내에 따옴표 추가하기

문자열 내에 따옴표를 추가할 경우가 있다. 특별히 문자열 따옴표라는 것을 알려주지 않으면 파이썬은 따옴표에서 문자열이 끝나는 신호라고 생각하여 처리한다. 때문에 문자열 사이에 따옴표를 추가할 경우에는 다음 중 한 가지 방법을 사용해야 한다.


A. 역슬레시 추가

문자열 시작과 끝을 위해 사용한 따옴표와 문장 중간에 추가할 따옴표가 같은 경우 따옴표 앞에 역슬레시()를 추가해 문자임을 알려준다.

[예제 3-29] 문자열에 역슬레시 추가하기

# 작은 따옴표 추가
str_title = 'Hello Python's World!'
print(str_title)

다음은 중간에 따옴표를 추가하여 문자열을 생성하는 방법입니다. 따옴표는 보통 문자열의 시작과 끝을 나타내기 때문에 문자열 중간에 사용할 수 없습니다. 이럴때는 따옴표 앞에 역슬레시(‘’)를 추가해 단순 문자 입력입을 알려 주어야 합니다.


[예제 3-30] 문자열에 따옴표 추가하기

# 큰 따옴표 추가
str_title = "Hello /"Python/" World!"
print(str_title)

[결과]

Hello "Python" World!

추가할 따옴표가 문자열의 시작과 끝에 사용한 따옴표와 모양이 다르다면 다음과 같이 그냥 사용해도 문자로 인식합니다.


[예제 3-31] 서로 다른 종류의 따옴표 문자열에 추가하기

# 따옴표 종류가 다른경우 역슬레쉬 없이
str_title = "Hello 'Python' World!"
print(str_title)

[결과]

Hello 'Python' World!


B. 따옴표 세 개 사용

따옴표 세 개로 문자열을 만들 때는 문자열 중간에 따옴표가 들어가도 상관 없다.

[예제 3-32] 큰 따옴표 세개 사용 문자열 생성하기

str_title = """Hello "Python" World!"""
print(str_title)

[결과]

Hello "Python" World!

[예제 3-33] 작은 따옴표 세개 사용 문자열 생성하기

# 작은 따옴표 세개 사용
str_title = '''Hello Python's World!'''
print(str_title)

[결과]

Hello Python's World!


1.3.3 문자열 길이 확인

파이썬은 배열의 길이를 얻어오는데 len( ) 함수를 제공한다. 문자열도 배열과 같은 성격을 갖기 때문에 len( ) 함수를 이용해 문자열의 길이를 얻어오면 된다.

형식

len(str)

파라미터

str (string) : 문자열

반환

(int) 문자열 길이

[예제 3-34] 문자열 길이 출력하기

str_title = 'Hello Python World!'
print(str_title)
print(len(str_title))

[결과]

Hello Python World!
19

아래와 같이 한 줄 이상인 경우에는 줄 끝에 개행 문자열이 추가된다.


[예제 3-35] 줄바꿈 문자열 출력하기

str_title = """Hello Python 
World!"""
print(str_title)
print(len(str_title))

[결과]

Hello Python
World!
20


1.3.4 문자열 인덱스와 슬라이싱 연산

문자열도 문자의 배열이라고 생각하면 파이썬의 배열과 같이 처리할 수 있다. 문자열에서 각 문자는 0번부터 시작하는 번호를 가지고 있는데 이를 인덱스라고 한다. 슬라이싱은 문자열이나 리스트형 데이터와 같이 배열 형태의 데이터에서 인덱스를 기준으로 데이터를 접근하는 방법이다. 슬라이싱 기능을 이용하면 문자열을 특정 자리수에서 쉽게 잘라낼 수 있다.

[예제 3-36] 문자열 출력하기

str_title = '''Hello Python's World!'''
print(str_title)

[결과]

Hello Python's World!

위와 같이 문자열 변수의 index를 확인해 보면 다음과 같다.


image

[그림 3-1-1] 문자열의 인덱스 번호



A. 특정 인덱스 문자열 접근

문자열에서 특정 번째의 문자를 얻어오는 방법에 대해 알아보자.

형식

string_var[index]

파라미터

• string_var (string) : 문자열
• index (int) : 0부터 시작하는 문자 인덱스

반환

(string) 인덱스에 해당하는 문자

end index가 5인 경우 5번째인 공백 문자열 앞까지, 즉 0~4번 문자열을 반환한다. 아래 예제를 보면 6번 index에 해당하는 문자인 ‘P’를 반환한다.


[예제 3-37] 문자열 중 특정 인덱스 문자 출력하기

str_title = '''Hello Python's World!'''
print(str_title[6])

[결과]

P

Hint ! 문자 열에서 특정 index의 문자열은 변경할 수 없다.

문자열은 배열과 같이 때문에 index를 이용해서 특정 문자의 값을 다음과 같이 변경하고 싶을 것이다.

str_title[6] = ‘C’

하지만 이 코드는 ‘str’ object does not support item assignment 라는 오류를 발생시킨다. 이유는 문자열이 변경불가능(immutable)한 변수이기 때문이다.



B. 앞에서부터 문자열을 가져오기

문자열에서 시작부터 특정 번째 까지의 문자열을 가져오는 방법에 대해 알아보자.

형식

string_var[:index]

파라미터

• string_var (string) : 문자열
• index (int) : 0부터 시작하는 문자 인덱스

반환

(string) 문자열에서 0부터 시작해 index 위치 직전까지 문자열

end index가 5인 경우 5번째인 공백 문자열 앞까지, 즉 0~4번 문자열을 반환한다.


[예제 3-38] 앞쪽 문자열 출력하기

str_title = '''Hello Python's World!'''
print(str_title[:5])

[결과]

Hello


C. 중간 문자열을 가져오기

문자열에서 중간의 문자열을 꺼내오는 방법에 대해 알아보자.

형식

string_var[start index : end index]

파라미터

• string_var (string) : 문자열
• start index (int) : 가져올 문자열의 시작 인덱스
• end index (int) : 가져올 문자열의 마지막 번째 다음 인덱스

반환

(string) 반환된 문자열

start index가 6인 경우 6번 ‘P’부터 14번 공백 문자열 앞까지의 문자열을 반환한다.


[예제 3-39] 중간 문자열 출력하기

str_title = '''Hello Python's World!'''
print(str_title[6:12])

[결과]

Python


D. 뒤쪽 문자열을 가져오기

문자열에서 중간부터 마지막까지 문자열을 가져오는 방법에 대해 알아보자.

형식

string_var[start index:]

파라미터

• string_var (string) : 문자열
• start index (int) : 가져올 문자열의 시작 인덱스

반환

(string) start index 부터 시작해 마지막까지 문자열 반환

index가 6인 경우 6번 ‘P’부터 끝까지의 문자열을 반환한다.


[예제 3-40] 뒤쪽 문자열 출력하기

str_title = '''Hello Python's World!'''
print(str_title[15:])

[결과]

World!


1.3.4 문자열 덧셈, 곱셈 연산


문자열에 대한 덧셈, 곱셈 연산에 대해 알아보자. 뺄셈과 나눗셈 연산은 지원하지 않는다.



A. 문자열을 연결할 때는 덧셈(+) 연산

덧셈 연산은 두 개의 문자열을 연결하는 덧셈 연산이다.

[예제 3-41] 문자열 덧셈 연산하기

str_title = 'Hello'
print(str_title)
print(str_title + ' ' + str_title)

[결과]

Hello
Hello Hello


B. 문자열을 반복할 때는 곱셈(*) 연산

문자열을 곱셈 연산자를 이용해 반복하는 방법에 대해 알아보자. 곱셈 연산은 문자열과 정수의 곱셈 연산을 의미하며, 정수 숫자만큼 문자열을 반복하여 연결한 결과를 반환한다.

형식

string_var * iter_num

파라미터

• string_var (string) : 문자열
• iter_num (int) : 문자열 반복 횟수

반환

(string) string_var이 iter_num번 만큼 반복되어 연결된 문자열

곱셈 연산을 덧셈 연산과 같이 사용할 수도 있다. 물론 산술 연산과 마찬가지로 곱셈 연산이 먼저 실행되고, 이후에 덧셈 연산이 실행된다.


[예제 3-42] 문자열 곱셈 연산하기

str_title = "Hello"
print("[1]", str_title)
print("[2]", str_title * 3)
print("[3]", (str_title + ) * 3)
print("[4]", "#" * 10 + " " + str_title + " " + "#" * 10)

[결과]

[1] Hello
[2] HelloHelloHello
[3] Hello Hello Hello 
[4] ########## Hello ##########


1.4. 불리언(Boolean)

불리언 자료형은 불 자료형이라고도 하며, 참/거짓을 나타내기 위한 변수이다. 파이썬에서 참은 True, 거짓은 False이다. True와 False는 불리언 자료형을 위해 예약된 문자며, 첫 글자를 대문자로 입력하는 것을 잘 기억해 두시기 바란다. 소문자 true나 대문자 TRUE는 파이썬에서 불리언이 아니다. 불리언은 조건문서 조건을 비교할 때 자주 사용된다. while 문에서 조건이 True인 경우 계속 반복하고 False인 경우는 중단한다. if 문에서도 조건이 True이면 내용을 실행하고, False면 if 문의 내용을 실행하지 않고 지나쳐간다.


1.4.1 불리언 값 변수 생성

불리언 값을 갖는 변수를 생성하려면 변수에 True 혹은 False를 직접 입력한다.

[예제 3-43] 불리언 변수 출력하기

condition = True
print(condition)

[결과]

True

불리언 변수를 생성하는 다른 방법은 조건식을 입력하는 것이다. 조건식이 참이면 True, 거짓이면 False 값이 생성된다.


[예제 3-44] True 조건 출력하기

# 123이 456보다 작으므로 참, 따라서 값은 True이다.
condition = (123 < 456)
print(condition)

[결과]

True

[예제 3-45] False 조건 출력하기

# 123이 456보다 크지 않으므로 거짓, 따라서 값은 False이다.
condition = (123 > 456)
print(condition)

[결과]

False


1.4.2 While 문에서 불리언 사용

while 문에서는 조건(condition)에 해당하는 값에 불리언을 사용할 수 있다. 불리언 값이 True이면 while 반복문을 계속하고 값이 False라면 while 문을 종료하게 된다.

[예제 3-46] while문 무한 루프 사례

# 프로그램을 강제로 종료시킬 때 까지 무한 loop. 아래와 같이 코드를 작성하면 큰일 나겠죠!
condition = True
while condition:
    # do something.

    # while문을 종료시키려면 condition 값을 False로 치환해준다.
    condition = False


1.4.3 if 문에서 불리언 사용

if 문은 조건문으로 조건의 값이 True 인 경우 if 절 안의 코드가 실행된다.

[예제 3-47] if 조건문 불리언 사용하기

# condition값이 True이므로 if 문을 실행한다.
condition = True
if condition:
    # do something.


1.4.4 불리언 값을 변환하면

불리언 값은 정수, 실수, 문자열 등으로 변환할 수 있다. 아래 예제를 확인해보자.

[예제 3-48] 조건 결과 참을 정수로 출력하기

# [1] condition은 True 이다. 불리언은 문자열로 변환하면 True이고, 정수로 변환하면 1이다.
condition = (123 < 456)
print("%s is integer %d" % (condition, condition))

[결과]

'True is integer 1'

조건이 거짓인 경우 False 문자열이 출력된다.


[예제 3-49] 조건 결과 거짓을 소수점으로 출력하기

# [2] condition은 False이다. 실수값으로는 0.000000 이다.
condition = (123 > 456)
print("%s is float %f" % (condition, condition))

[결과]

'False is float 0.000000'