Python/Python 공부 정리

[파이썬 독학] 2.1. 자료형과 문자열

Dailybook406 2022. 5. 8. 23:19

자료형에 대해 알아봅시다.

 

[ 자료형과 기본 자료형]

자료(data)프로그램(컴퓨터)이 처리할 수 있는 문자, 숫자 등의 형태로 되어있는 모든 것을 말한다.

자료형(data type)이란 말 그대로 자료의 형식을 말하며, 개발자들이 쉽게 사용할 수 있도록 기능과 역할에 따라서 여러 종류의 자료를 구분한 것이다.

가장 기본적인 자료형으로는 문자열, 숫자, 이 있다.

  • 문자열(string) : 메일 제목, 메시지 내용 등    ex) "Hello Python", "반가워요", "406"
  • 숫자(number) : 물건의 가격, 학생의 성적 등    ex) 23, 406, 157.68
  • 불(boolean) : 친구의 로그인 상태 등    ex) True, Flase

위의 기본 자료형을 합쳐서 '2022.04.28'과 같이 날짜를 표현하는 새로운 자료형으로 만들 수도 있다.


※ 자료형 확인하기

파이썬에서 자료형을 확인할 때는 type() 함수를 사용한다.

 

함수 내부에 특정 자료를 넣으면 그 자료가 어떤 자료형을 가지고 있는지 확인할 수 있다.

print(type("Hello Python"))
print(type(406))
print(type(23.58))

실행결과

<class 'str'>
<class 'int'>
<class 'float'>

이때 'str', 'int', 'float'의 의미는 각각 아래와 같다.

  • str(string) : 문자열을 의미
  • int(integer) : 정수를 의미
  • float(float point) : 실수(부동 소수점)을 의미
더보기

부동 소수점은 실수형의 경우 23.406을 0.23406×10²와 같이 소수점의 위치를 바꿔도 결국 같은 숫자이기 때문에 '소수점이 움직이는 숫자'라는 의미로 표현하기 위해서 쓰인다.

 

다른 방법으로 isinstance() 함수를 이용하여 어떤 객체가 무슨 자료형인지 검사할 수도 있다.

괄호 안에 확인하고 싶은 자료와 자료형을 입력하면 일치할 경우 True, 일치하지 않는 경우 False를 출력한다.

print(isinstance('hello', int))
print(isinstance(273, int))

실행결과

False
True

 


[ 문자열 만들기 ]

print() 함수의 출력을 배울 때, 괄호 속에 출력할 내용을 따옴표로 둘러싼 것을 볼 수 있다.

 

이처럼 기본적으로 문자열은 문자들을 따옴표로 감싸서 만든다.

따옴표는 큰따옴표( " )를 사용할 수도 있고, 작은따옴표( ' )를 사용해도 된다.

print("Hello Python")
print('문자열 출력')

출력결과

Hello Python
문자열 출력

 

여기서 굳이 큰따옴표와 작은따옴표를 두 가지나 사용하는 이유가 궁금할 수 있을 것이다.

그 이유는 문자열 안에 큰따옴표나 작은따옴표를 넣기 위해서이다.

 

만일 문자열 내부에 큰따옴표를 넣어야할 경우는 문자열을 작은따옴표로 감싼다.

print('"거기서!"라고 말했다.')

실행결과

"거기서!"라고 말했다.

 

작은따옴표를 문자열 내부에 넣어야할 경우 문자열을 큰따옴표로 감싼다.

print("'나는 할 수 있어..!'라고 마음속으로 말했다.")

실행결과

'나는 할 수 있어..!'라고 마음속으로 말했다.

 


※ 여러 줄 문자열 만들기

따옴표 3개를 연속으로 사용( """ or ''' )하여 양쪽을 둘러싸면 여러 줄의 문자열을 한 번에 입력할 수 있다.

print('''동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세''')

실행결과

동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세

 


※ 이스케이프 문자

위의 방법 말고도 이스케이프 문자(escape character)를 이용하여 문자열 내부에서 따옴표를 사용할 수도 있다.

 

이스케이프 문자는 '역슬래시 기호()'와 함께 조합해서 사용하는 특수한 문자를 의미한다.

한국어 키보드에서\는 원화 기호(\)이다.

 

이스케이프 문자 뒤에 큰따옴표나 작은따옴표를 붙이면 문자 그대로를 출력한다.

print("\"야!\"라고 불렀다")
print('Python\'s school')

실행결과

"야!"라고 불렀다
Python's school

 

아래는 이스케이프 문자를 이용한 다양한 코드들이다.

  • \n : 문자열 안에서 줄바꿈을 의미한다.
  • \t : 문자열 안에서 탭(Tab)을 의미한다(탭은 일반적으로 공백 4칸을 의미한다).
  • \\ : 역슬래시(\) 문자 그대로를 의미한다.
  • \r : 캐리지 리턴(Carriage Return) - 줄 바꿈, 커서를 앞으로 이동시킨다.
  • \f : 폼 피드(Formfeed) - 줄 바꿈, 커서를 다음 줄로 이동시킨다.
  • \a : 벨 소리
  • \b : 백 스페이스(backspace)
  • \000 : 널 문자
  • \v : 수직 탭

형광펜으로 표시된 코드는 자주 사용하는 코드이므로 기억하되, 나머지는 참고로 하자.

 

Tip. 특수 문자 없이 역슬래시(\)가 많이 포함된 문자열을 나타내려면 수식이 길어지고 귀찮을 수 있는데, 이때 문자열 앞에  r 을 쓰면 문자열을 있는 그대로 출력할 수 있게 해준다. 여기서 r은 raw를 뜻한다.

print(r'This\is\test\print')

실행결과

This\is\test\print

 


[ 문자열 연산자 ]

파이썬은 문자열에도 연산자를 적용할 수 있다.

 

일반적으로 우리가 아는 연산자와 비슷하게 사용하지만, 숫자에만 적용을 할 수 있는 연산자가 있고 문자에만 적용을 할 수 있는 연산자가 따로 있다.

즉, 각각의 자료는 사용할 수 있는 연산자가 정해져 있으니 주의하자.


※ 문자열 연결 연산자

문자열에서는 + 기호로 문자열 더해서 연결할 수 있다. 이때 +기호를 문자열 연결 연산자라고 하며, 두 문자열을 연결해서 새로운 문자열을 만들어낸다.

print("Hello","Python")
print("Hello" + "Python")

실행결과

Hello Python
HelloPython

 

주의할 점은 + 기호를 문자열은 문자열끼리, 숫자는 숫자끼리 연결하여 사용해야 한다.

문자열을 숫자와 함께 연결해서 사용할 경우 오류를 발생시킨다.

print("Hello" + 406)

실행결과

TypeError: can only concatenate str (not "int") to str

 

혹여나 숫자를 문자열과 함께 연산하려면 큰따옴표를 붙여 문자열로 만든 후 사용해야 한다.

print("Hello" + "406")

실행결과

Hello406

 


※ 문자열 반복 연산자

문자열을 숫자와 * 기호로 연결하면 문자열을 반복한다.

이때 * 기호를 문자열을 숫자만큼 반복해서 출력한다고 해서 문자열 반복 연산자라고 한다.

print("Hello" * 3)

실행결과

HelloHelloHello

 


※ 문자열 선택 연산자(인덱싱) & 문자열 범위 선택 연산자(슬라이싱)

문자 선택 연산자문자열 내부의 문자 하나를 선택하는 연산자이다.

대괄호([ ]) 안에 선택할 문자의 위치를 지정하며, 대괄호 안의 숫자를 인덱스(index)라고 한다.

 

여기서 알아야할 점이 하나 있다.

 

프로그래밍 언어는 인덱스 유형을 크게 두 가지로 구분해서 사용한다.

하나는 숫자를 0부터 세는 제로 인덱스(zero index), 다른 하나는 숫자를 1부터 세는 원 인덱스(one index)이다.

그중 파이썬은 '제로 인덱스' 유형의 프로그램이므로 문자열의 위치를 셀 때 0부터 센다.

print('Hello'[0])
print('Hello'[3])

실행결과

H
l

 

대괄호 안에 음수를 입력하면 뒤에서부터 문자를 선택할 수도 있다.

print('Hello Python'[-2])
print('Hello Python'[-6])

실행결과

o
P

 

문자열 범위 선택 연산자를 이용하여 문자열의 특정 범위를 선택할 수도 있다.

이때 범위는 대괄호 안에 위치를 콜론으로 구분([ : ])해서 지정한다.

 

여기서도 알아야할 점이 있다.

 

범위 선택도 프로그래밍 언어에 따라 두 가지 유형이 있다.

하나는 범위 지정시 '마지막 숫자를 포함'이 있고, 다른 하나는 '마지막 숫자를 포함하지 않음'이다.

이중 파이썬은 '마지막 숫자를 포함하지 않음' 유형의 프로그램이다.

print('Hello Python'[1:5])

실행결과

ello

따라서 위의 코드 속 범위는 1~5번째가 아닌, 1~4번째 문자를 의미한다.

 

범위를 선택할 때 대괄호 안에 넣는 숫자 중 하나를 생략하여 사용할 수도 있다.

뒤의 값을 생략하면 가장 최대 위치까지, 앞의 값을 생략하면 가장 앞쪽의 위치까지 지정한다.

print('Hello Python'[2:])
print('Hello Python'[:7])

실행결과

llo Python
Hello P

 

이처럼 [ ] 기호를 이용해 문자열의 특정 위치에 있는 문자를 참조하는 것 인덱싱(indexing)이라고 하며,
[ : ] 기호를 이용해 문자열의 일부를 추출하는 것슬라이싱(slicing)이라고 한다.

 

하지만 인덱싱이나 슬라이싱으로 문자열을 추출한다 하더라도 원본은 절대 변하지 않는다.

a = 'Hello Python'
print(a[0:4])    # 문자열 슬라이싱
print(a)    # 원본 출력

실행결과

Hell    # 원본에서 슬라이싱을 했지만
Hello Python    # 원본은 변하지 않음

 

파이썬의 문자열은 변경할 수도 없다.

hi = 'Hallo Python'
hi[1] = 'e'

실행결과

TypeError: 'str' object does not support item assignment

 


[ 문자열의 길이 구하기 ]

문자열의 길이를 구하고 싶을 때len() 함수를 이용하면 된다.

len() 함수의 괄호 내부에 문자열을 넣으면 '문자열에 들어있는 문자의 개수(문자열의 길이)'를 세어준다.

print(len('Hello Python'))

실행결과

12

이때 코드를 보면 함수가 이중으로 되어 있다는 걸 알 수 있다.

이렇게 함수가 여러 번 중첩되어 있을 경우는 괄호 안쪽부터 먼저 실행된다.